Import of original zoneinfo code and database - tzcode

old-tzcode-32-bit-output and tzdata2007d.
This commit is contained in:
Ben Gras 2007-03-26 10:55:16 +00:00
parent 5596ab1ec7
commit 3b2c65e323
64 changed files with 27357 additions and 0 deletions

424
commands/zoneinfo/Makefile Normal file
View file

@ -0,0 +1,424 @@
# @(#)Makefile 7.109
# 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
# to correct things.
# Use the command
# make zonenames
# to get a list of the values you can use for LOCALTIME.
LOCALTIME= Factory
# 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).
# (When a POSIX-style environment variable is handled, the rules in the
# template file are used to determine "spring forward" and "fall back" days and
# times; the environment variable itself specifies UTC offsets of standard and
# summer time.)
# Alternately, if you discover you've got the wrong time zone, you can just
# zic -p rightzone
# to correct things.
# Use the command
# make zonenames
# to get a list of the values you can use for POSIXRULES.
# If you want POSIX compatibility, use "America/New_York".
POSIXRULES= America/New_York
# Also see TZDEFRULESTRING below, which takes effect only
# if the time zone files cannot be accessed.
# Everything gets put in subdirectories of. . .
TOPDIR= /usr/local
# "Compiled" time zone information is placed in the "TZDIR" directory
# (and subdirectories).
# Use an absolute path name for TZDIR unless you're just testing the software.
TZDIR= $(TOPDIR)/etc/zoneinfo
# The "tzselect", "zic", and "zdump" commands get installed in. . .
ETCDIR= $(TOPDIR)/etc
# If you "make INSTALL", the "date" command gets installed in. . .
BINDIR= $(TOPDIR)/bin
# Manual pages go in subdirectories of. . .
MANDIR= $(TOPDIR)/man
# Library functions are put in an archive in LIBDIR.
LIBDIR= $(TOPDIR)/lib
TZLIB= $(LIBDIR)/libtz.a
# 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.
# POSIX mandates that leap seconds not be counted; for compatibility with it,
# use either "posix_only" or "posix_right".
REDO= posix_right
# Since "." may not be in PATH...
YEARISTYPE= ./yearistype
# Non-default libraries needed to link.
# Add -lintl if you want to use `gettext' on Solaris.
LDLIBS=
# Add the following to the end of the "CFLAGS=" line as needed.
# -Dconst= if `const' does not work (SunOS 4.x cc, OSF1 V5.0 cc)
# -DHAVE_ADJTIME=0 if `adjtime' does not exist (SVR0?)
# -DHAVE_GETTEXT=1 if `gettext' works (GNU, Linux, Solaris); also see LDLIBS
# -DHAVE_INCOMPATIBLE_CTIME_R=1 if your system's time.h declares
# ctime_r and asctime_r incompatibly with the POSIX standard (Solaris 8).
# -DHAVE_SETTIMEOFDAY=0 if settimeofday does not exist (SVR0?)
# -DHAVE_SETTIMEOFDAY=1 if settimeofday has just 1 arg (SVR4)
# -DHAVE_SETTIMEOFDAY=2 if settimeofday uses 2nd arg (4.3BSD)
# -DHAVE_SETTIMEOFDAY=3 if settimeofday ignores 2nd arg (4.4BSD)
# -DHAVE_STRERROR=0 if your system lacks the strerror function
# -DHAVE_SYMLINK=0 if your system lacks the symlink function
# -DHAVE_SYS_STAT_H=0 if your compiler lacks a "sys/stat.h"
# -DHAVE_SYS_WAIT_H=0 if your compiler lacks a "sys/wait.h"
# -DLOCALE_HOME=\"path\" if locales are in "path", not "/usr/lib/locale"
# -DHAVE_UNISTD_H=0 if your compiler lacks a "unistd.h" (Microsoft C++ 7?)
# -DHAVE_UTMPX_H=1 if your compiler has a "utmpx.h"
# -DTZDEFRULESTRING=\",date/time,date/time\" to default to the specified
# DST transitions if the time zone files cannot be accessed
# -DTZ_DOMAIN=\"foo\" to use "foo" for gettext domain name; default is "tz"
# -TTZ_DOMAINDIR=\"/path\" to use "/path" for gettext directory;
# the default is system-supplied, typically "/usr/lib/locale"
# $(GCC_DEBUG_FLAGS) if you are using GCC and want lots of checking
# -DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU=1
# if you do not want run time warnings about formats that may cause
# year 2000 grief
# -DZIC_MAX_ABBR_LEN_WO_WARN=3
# (or some other number) to set the maximum time zone abbreviation length
# that zic will accept without a warning (the default is 6)
GCC_DEBUG_FLAGS = -Dlint -g -O -fno-common \
-Wall -Wcast-qual -Wconversion -Wmissing-prototypes \
-Wnested-externs -Wpointer-arith -Wshadow \
-Wtraditional # -Wstrict-prototypes -Wwrite-strings
#
# If you want to use System V compatibility code, add
# -DUSG_COMPAT
# to the end of the "CFLAGS=" line. This arrange for "timezone" and "daylight"
# variables to be kept up-to-date by the time conversion functions. Neither
# "timezone" nor "daylight" is described in X3J11's work.
#
# 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.
# Neither tm_gmtoff nor _tm_gmtoff is described in X3J11's work;
# in its work, use of "tm_gmtoff" is described as non-conforming.
# Both Linux and BSD have done the equivalent of defining TM_GMTOFF in
# their recent releases.
#
# If your system has a "zone abbreviation" 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.
# Neither tm_zone nor _tm_zone is described in X3J11's work;
# in its work, use of "tm_zone" is described as non-conforming.
# Both UCB and Sun have done the equivalent of defining TM_ZONE in
# their recent releases.
#
# If you want functions that were inspired by early versions of X3J11's work,
# add
# -DSTD_INSPIRED
# to the end of the "CFLAGS=" line. This arranges for the functions
# "tzsetwall", "offtime", "timelocal", "timegm", "timeoff",
# "posix2time", and "time2posix" to be added to the time conversion library.
# "tzsetwall" is like "tzset" except that it arranges for local wall clock
# time (rather than the time specified in the TZ environment variable)
# to be used.
# "offtime" is like "gmtime" except that it accepts a second (long) argument
# that gives an offset to add to the time_t when converting it.
# "timelocal" is equivalent to "mktime".
# "timegm" is like "timelocal" except that it turns a struct tm into
# a time_t using UTC (rather than local time as "timelocal" does).
# "timeoff" is like "timegm" except that it accepts a second (long) argument
# that gives an offset to use when converting to a time_t.
# "posix2time" and "time2posix" are described in an included manual page.
# X3J11's work does not describe any of these functions.
# Sun has provided "tzsetwall", "timelocal", and "timegm" in SunOS 4.0.
# These functions may well disappear in future releases of the time
# conversion package.
#
# 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).
# This reduces (slightly) the run-time data-space requirements of
# the time conversion functions; it may reduce the acceptability of your system
# to folks in oil- and cash-rich places.
#
# If you want to allocate state structures in localtime, add
# -DALL_STATE
# to the end of the "CFLAGS=" line. Storage is obtained by calling malloc.
#
# If you want an "altzone" variable (a la System V Release 3.1), add
# -DALTZONE
# to the end of the "CFLAGS=" line.
# This variable is not described in X3J11's work.
#
# If you want a "gtime" function (a la MACH), add
# -DCMUCS
# to the end of the "CFLAGS=" line
# This function is not described in X3J11's work.
#
# NIST-PCTS:151-2, Version 1.4, (1993-12-03) is a test suite put
# out by the National Institute of Standards and Technology
# which claims to test C and Posix conformance. If you want to pass PCTS, add
# -DPCTS
# to the end of the "CFLAGS=" line.
#
# If you want strict compliance with XPG4 as of 1994-04-09, add
# -DXPG4_1994_04_09
# to the end of the "CFLAGS=" line. This causes "strftime" to always return
# 53 as a week number (rather than 52 or 53) for those days in January that
# before the first Monday in January when a "%V" format is used and January 1
# falls on a Friday, Saturday, or Sunday.
CFLAGS=
# If you want zic's -s option used when installing, uncomment the next line
# ZFLAGS= -s
zic= ./zic
ZIC= $(zic) $(ZFLAGS)
# The name of a Posix-compliant `awk' on your system.
AWK= nawk
# The path where SGML DTDs are kept.
SGML_SEARCH_PATH= $(TOPDIR)/share/doc/sgml-lib/REC-xhtml1-20000126/
# The catalog file(s) to use when validating XHTML.
SGML_CATALOG_FILES= xhtml.soc
# The name, arguments and environment of a program to validate your web pages.
# See <http://www.jclark.com/sp/> for a validator, and
# <http://validator.w3.org/source/> for a validation library.
VALIDATE = nsgmls
VALIDATE_FLAGS = -s -B -wall -wno-unused-param -wxml
VALIDATE_ENV = \
SGML_CATALOG_FILES=$(SGML_CATALOG_FILES) \
SGML_SEARCH_PATH=$(SGML_SEARCH_PATH) \
SP_CHARSET_FIXED=YES \
SP_ENCODING=UTF-8
###############################################################################
cc= cc
CC= $(cc) -DTZDIR=\"$(TZDIR)\"
TZCSRCS= zic.c localtime.c asctime.c scheck.c ialloc.c
TZCOBJS= zic.o localtime.o asctime.o scheck.o ialloc.o
TZDSRCS= zdump.c localtime.c ialloc.c
TZDOBJS= zdump.o localtime.o ialloc.o
DATESRCS= date.c localtime.c logwtmp.c strftime.c asctime.c
DATEOBJS= date.o localtime.o logwtmp.o strftime.o asctime.o
LIBSRCS= localtime.c asctime.c difftime.c
LIBOBJS= localtime.o asctime.o difftime.o
HEADERS= tzfile.h private.h
NONLIBSRCS= zic.c zdump.c scheck.c ialloc.c
NEWUCBSRCS= date.c logwtmp.c strftime.c
SOURCES= $(HEADERS) $(LIBSRCS) $(NONLIBSRCS) $(NEWUCBSRCS) tzselect.ksh
MANS= newctime.3 newstrftime.3 newtzset.3 time2posix.3 \
tzfile.5 tzselect.8 zic.8 zdump.8
DOCS= README Theory $(MANS) date.1 Makefile
PRIMARY_YDATA= africa antarctica asia australasia \
europe northamerica southamerica
YDATA= $(PRIMARY_YDATA) pacificnew etcetera factory backward
NDATA= systemv
SDATA= solar87 solar88 solar89
TDATA= $(YDATA) $(NDATA) $(SDATA)
TABDATA= iso3166.tab zone.tab
DATA= $(YDATA) $(NDATA) $(SDATA) $(TABDATA) leapseconds yearistype.sh
WEB_PAGES= tz-art.htm tz-link.htm
MISC= usno1988 usno1989 usno1989a usno1995 usno1997 usno1998 \
itca.jpg $(WEB_PAGES) checktab.awk workman.sh
ENCHILADA= $(DOCS) $(SOURCES) $(DATA) $(MISC)
# And for the benefit of csh users on systems that assume the user
# shell should be used to handle commands in Makefiles. . .
SHELL= /bin/sh
all: tzselect zic zdump $(LIBOBJS)
ALL: all date
install: all $(DATA) $(REDO) $(TZLIB) $(MANS) $(TABDATA)
$(ZIC) -y $(YEARISTYPE) \
-d $(TZDIR) -l $(LOCALTIME) -p $(POSIXRULES)
-rm -f $(TZDIR)/iso3166.tab $(TZDIR)/zone.tab
cp iso3166.tab zone.tab $(TZDIR)/.
-mkdir $(TOPDIR) $(ETCDIR)
cp tzselect zic zdump $(ETCDIR)/.
-mkdir $(TOPDIR) $(MANDIR) \
$(MANDIR)/man3 $(MANDIR)/man5 $(MANDIR)/man8
-rm -f $(MANDIR)/man3/newctime.3 \
$(MANDIR)/man3/newtzset.3 \
$(MANDIR)/man5/tzfile.5 \
$(MANDIR)/man8/tzselect.8 \
$(MANDIR)/man8/zdump.8 \
$(MANDIR)/man8/zic.8
cp newctime.3 newtzset.3 $(MANDIR)/man3/.
cp tzfile.5 $(MANDIR)/man5/.
cp tzselect.8 zdump.8 zic.8 $(MANDIR)/man8/.
INSTALL: ALL install date.1
-mkdir $(TOPDIR) $(BINDIR)
cp date $(BINDIR)/.
-mkdir $(TOPDIR) $(MANDIR) $(MANDIR)/man1
-rm -f $(MANDIR)/man1/date.1
cp date.1 $(MANDIR)/man1/.
zdump: $(TZDOBJS)
$(CC) $(CFLAGS) $(LFLAGS) $(TZDOBJS) $(LDLIBS) -o $@
zic: $(TZCOBJS) yearistype
$(CC) $(CFLAGS) $(LFLAGS) $(TZCOBJS) $(LDLIBS) -o $@
yearistype: yearistype.sh
cp yearistype.sh yearistype
chmod +x yearistype
posix_only: zic $(TDATA)
$(ZIC) -y $(YEARISTYPE) -d $(TZDIR) -L /dev/null $(TDATA)
right_only: zic leapseconds $(TDATA)
$(ZIC) -y $(YEARISTYPE) -d $(TZDIR) -L leapseconds $(TDATA)
# In earlier versions of this makefile, the other two directories were
# subdirectories of $(TZDIR). However, this led to configuration errors.
# For example, with posix_right under the earlier scheme,
# TZ='right/Australia/Adelaide' got you localtime with leap seconds,
# but gmtime without leap seconds, which led to problems with applications
# like sendmail that subtract gmtime from localtime.
# Therefore, the other two directories are now siblings of $(TZDIR).
# You must replace all of $(TZDIR) to switch from not using leap seconds
# to using them, or vice versa.
other_two: zic leapseconds $(TDATA)
$(ZIC) -y $(YEARISTYPE) -d $(TZDIR)-posix -L /dev/null $(TDATA)
$(ZIC) -y $(YEARISTYPE) \
-d $(TZDIR)-leaps -L leapseconds $(TDATA)
posix_right: posix_only other_two
right_posix: right_only other_two
zones: $(REDO)
$(TZLIB): $(LIBOBJS)
-mkdir $(TOPDIR) $(LIBDIR)
ar ru $@ $(LIBOBJS)
if [ -x /usr/ucb/ranlib -o -x /usr/bin/ranlib ] ; \
then ranlib $@ ; fi
# We use the system's logwtmp in preference to ours if available.
date: $(DATEOBJS)
ar r ,lib.a logwtmp.o
if [ -x /usr/ucb/ranlib -o -x /usr/bin/ranlib ] ; \
then ranlib ,lib.a ; fi
$(CC) $(CFLAGS) date.o localtime.o asctime.o strftime.o \
$(LDLIBS) -lc ,lib.a -o $@
rm -f ,lib.a
tzselect: tzselect.ksh
sed \
-e 's|AWK=[^}]*|AWK=$(AWK)|g' \
-e 's|TZDIR=[^}]*|TZDIR=$(TZDIR)|' \
<$? >$@
chmod +x $@
check: check_tables check_web
check_tables: checktab.awk $(PRIMARY_YDATA)
$(AWK) -f checktab.awk $(PRIMARY_YDATA)
check_web: $(WEB_PAGES)
$(VALIDATE_ENV) $(VALIDATE) $(VALIDATE_FLAGS) $(WEB_PAGES)
clean:
rm -f core *.o *.out tzselect zdump zic yearistype date
maintainer-clean: clean
@echo 'This command is intended for maintainers to use; it'
@echo 'deletes files that may need special tools to rebuild.'
rm -f *.[1-8].txt tzcode.tar.gz tzdata.tar.gz
names:
@echo $(ENCHILADA)
# The zics below ensure that each data file can stand on its own.
# We also do an all-files run to catch links to links.
public: $(ENCHILADA)
make maintainer-clean
make "CFLAGS=$(GCC_DEBUG_FLAGS)"
-mkdir /tmp/,tzpublic
-for i in $(TDATA) ; do zic -v -d /tmp/,tzpublic $$i 2>&1 | grep -v "starting year" ; done
for i in $(TDATA) ; do zic -d /tmp/,tzpublic $$i || exit; done
zic -v -d /tmp/,tzpublic $(TDATA) || exit
rm -f -r /tmp/,tzpublic
for i in *.[1-8] ; do sh workman.sh $$i > $$i.txt || exit; done
$(AWK) -f checktab.awk $(PRIMARY_YDATA)
tar cf - $(DOCS) $(SOURCES) $(MISC) *.[1-8].txt | gzip -9 > tzcode.tar.gz
tar cf - $(DATA) | gzip -9 > tzdata.tar.gz
typecheck:
make clean
for i in "long long" unsigned double; \
do \
make CFLAGS="-DTYPECHECK -D_TIME_T \"-Dtime_t=$$i\"" ; \
./zdump -v Europe/Rome ; \
make clean ; \
done
zonenames: $(TDATA)
@$(AWK) '/^Zone/ { print $$2 } /^Link/ { print $$3 }' $(TDATA)
asctime.o: private.h tzfile.h
date.o: private.h
difftime.o: private.h
ialloc.o: private.h
localtime.o: private.h tzfile.h
scheck.o: private.h
strftime.o: tzfile.h
zic.o: private.h tzfile.h
.KEEP_STATE:

84
commands/zoneinfo/README Normal file
View file

@ -0,0 +1,84 @@
@(#)README 7.12
"What time is it?" -- Richard Deacon as The King
"Any time you want it to be." -- Frank Baxter as The Scientist
(from the Bell System film "About Time")
The 1989 update of the time zone package featured
* POSIXization (including interpretation of POSIX-style TZ environment
variables, provided by Guy Harris),
* ANSIfication (including versions of "mktime" and "difftime"),
* SVIDulation (an "altzone" variable)
* MACHination (the "gtime" function)
* corrections to some time zone data (including corrections to the rules
for Great Britain and New Zealand)
* reference data from the United States Naval Observatory for folks who
want to do additional time zones
* and the 1989 data for Saudi Arabia.
(Since this code will be treated as "part of the implementation" in some places
and as "part of the application" in others, there's no good way to name
functions, such as timegm, that are not part of the proposed ANSI C standard;
such functions have kept their old, underscore-free names in this update.)
And the "dysize" function has disappeared; it was present to allow compilation
of the "date" command on old BSD systems, and a version of "date" is now
provided in the package. The "date" command is not created when you "make all"
since it may lack options provided by the version distributed with your
operating system, or may not interact with the system in the same way the
native version does.
Since POSIX frowns on correct leap second handling, the default behavior of
the "zic" command (in the absence of a "-L" option) has been changed to omit
leap second information from its output files.
Here is a recipe for acquiring, building, installing, and testing the
tz distribution on a GNU/Linux or similar host.
mkdir tz
cd tz
wget 'ftp://elsie.nci.nih.gov/pub/tz*.tar.gz'
gzip -dc tzcode*.tar.gz | tar -xf -
gzip -dc tzdata*.tar.gz | tar -xf -
Be sure to read the comments in "Makefile" and make any changes needed
to make things right for your system, especially if you are using some
platform other than GNU/Linux. Then run the following commands,
substituting your desired installation directory for "$HOME/tzdir":
make TOPDIR=$HOME/tzdir install
$HOME/tzdir/etc/zdump -v America/Los_Angeles
To use the new functions, use a "-ltz" option when compiling or linking.
Historical local time information has been included here to:
* provide a compendium of data about the history of civil time
that is useful even if the data are not 100% accurate;
* give an idea of the variety of local time rules that have
existed in the past and thus an idea of the variety that may be
expected in the future;
* provide a test of the generality of the local time rule description
system.
The information in the time zone data files is by no means authoritative;
the files currently do not even attempt to covar all time stamps before
1970, and there are undoubtedly errors even for time stamps since 1970.
If you know that the rules are different from those in a file, by all means
feel free to change file (and please send the changed version to
tz@elsie.nci.nih.gov for use in the future). Europeans take note!
Thanks to these Timezone Caballeros who've made major contributions to the
time conversion package: Keith Bostic; Bob Devine; Paul Eggert; Robert Elz;
Guy Harris; Mark Horton; John Mackin; and Bradley White. Thanks also to
Michael Bloom, Art Neilson, Stephen Prince, John Sovereign, and Frank Wales
for testing work, and to Gwillim Law for checking local mean time data.
None of them are responsible for remaining errors.
Look in the ~ftp/pub directory of elsie.nci.nih.gov
for updated versions of these files.
Please send comments or information to tz@elsie.nci.nih.gov.

569
commands/zoneinfo/Theory Normal file
View file

@ -0,0 +1,569 @@
@(#)Theory 7.19
----- Outline -----
Time and date functions
Names of time zone regions
Time zone abbreviations
Calendrical issues
Time and time zones on Mars
----- Time and date functions -----
These time and date functions are upwards compatible with POSIX,
an international standard for UNIX-like systems.
As of this writing, the current edition of POSIX is:
Standard for Information technology
-- Portable Operating System Interface (POSIX (R))
-- System Interfaces
IEEE Std 1003.1, 2004 Edition
<http://www.opengroup.org/online-pubs?DOC=7999959899>
<http://www.opengroup.org/pubs/catalog/t041.htm>
POSIX has the following properties and limitations.
* In POSIX, time display in a process is controlled by the
environment variable TZ. Unfortunately, the POSIX TZ string takes
a form that is hard to describe and is error-prone in practice.
Also, POSIX TZ strings can't deal with other (for example, Israeli)
daylight saving time rules, or situations where more than two
time zone abbreviations are used in an area.
The POSIX TZ string takes the following form:
stdoffset[dst[offset],date[/time],date[/time]]
where:
std and dst
are 3 or more characters specifying the standard
and daylight saving time (DST) zone names.
Starting with POSIX.1-2001, std and dst may also be
in a quoted form like "<UTC+10>"; this allows
"+" and "-" in the names.
offset
is of the form `[-]hh:[mm[:ss]]' and specifies the
offset west of UTC. The default DST offset is one hour
ahead of standard time.
date[/time],date[/time]
specifies the beginning and end of DST. If this is absent,
the system supplies its own rules for DST, and these can
differ from year to year; typically US DST rules are used.
time
takes the form `hh:[mm[:ss]]' and defaults to 02:00.
date
takes one of the following forms:
Jn (1<=n<=365)
origin-1 day number not counting February 29
n (0<=n<=365)
origin-0 day number counting February 29 if present
Mm.n.d (0[Sunday]<=d<=6[Saturday], 1<=n<=5, 1<=m<=12)
for the dth day of week n of month m of the year,
where week 1 is the first week in which day d appears,
and `5' stands for the last week in which day d appears
(which may be either the 4th or 5th week).
Here is an example POSIX TZ string, for US Pacific time using rules
appropriate from 1987 through 2006:
TZ='PST8PDT,M4.1.0/02:00,M10.5.0/02:00'
This POSIX TZ string is hard to remember, and mishandles time stamps
before 1987 and after 2006. With this package you can use this
instead:
TZ='America/Los_Angeles'
* POSIX does not define the exact meaning of TZ values like "EST5EDT".
Typically the current US DST rules are used to interpret such values,
but this means that the US DST rules are compiled into each program
that does time conversion. This means that when US time conversion
rules change (as in the United States in 1987), all programs that
do time conversion must be recompiled to ensure proper results.
* In POSIX, there's no tamper-proof way for a process to learn the
system's best idea of local wall clock. (This is important for
applications that an administrator wants used only at certain times--
without regard to whether the user has fiddled the "TZ" environment
variable. While an administrator can "do everything in UTC" to get
around the problem, doing so is inconvenient and precludes handling
daylight saving time shifts--as might be required to limit phone
calls to off-peak hours.)
* POSIX requires that systems ignore leap seconds.
These are the extensions that have been made to the POSIX functions:
* The "TZ" environment variable is used in generating the name of a file
from which time zone information is read (or is interpreted a la
POSIX); "TZ" is no longer constrained to be a three-letter time zone
name followed by a number of hours and an optional three-letter
daylight time zone name. The daylight saving time rules to be used
for a particular time zone are encoded in the time zone file;
the format of the file allows U.S., Australian, and other rules to be
encoded, and allows for situations where more than two time zone
abbreviations are used.
It was recognized that allowing the "TZ" environment variable to
take on values such as "America/New_York" might cause "old" programs
(that expect "TZ" to have a certain form) to operate incorrectly;
consideration was given to using some other environment variable
(for example, "TIMEZONE") to hold the string used to generate the
time zone information file name. In the end, however, it was decided
to continue using "TZ": it is widely used for time zone purposes;
separately maintaining both "TZ" and "TIMEZONE" seemed a nuisance;
and systems where "new" forms of "TZ" might cause problems can simply
use TZ values such as "EST5EDT" which can be used both by
"new" programs (a la POSIX) and "old" programs (as zone names and
offsets).
* To handle places where more than two time zone abbreviations are used,
the functions "localtime" and "gmtime" set tzname[tmp->tm_isdst]
(where "tmp" is the value the function returns) to the time zone
abbreviation to be used. This differs from POSIX, where the elements
of tzname are only changed as a result of calls to tzset.
* Since the "TZ" environment variable can now be used to control time
conversion, the "daylight" and "timezone" variables are no longer
needed. (These variables are defined and set by "tzset"; however, their
values will not be used by "localtime.")
* The "localtime" function has been set up to deliver correct results
for near-minimum or near-maximum time_t values. (A comment in the
source code tells how to get compatibly wrong results).
* A function "tzsetwall" has been added to arrange for the system's
best approximation to local wall clock time to be delivered by
subsequent calls to "localtime." Source code for portable
applications that "must" run on local wall clock time should call
"tzsetwall();" if such code is moved to "old" systems that don't
provide tzsetwall, you won't be able to generate an executable program.
(These time zone functions also arrange for local wall clock time to be
used if tzset is called--directly or indirectly--and there's no "TZ"
environment variable; portable applications should not, however, rely
on this behavior since it's not the way SVR2 systems behave.)
* These functions can account for leap seconds, thanks to Bradley White.
Points of interest to folks with other systems:
* This package is already part of many POSIX-compliant hosts,
including BSD, HP, Linux, Network Appliance, SCO, SGI, and Sun.
On such hosts, the primary use of this package
is to update obsolete time zone rule tables.
To do this, you may need to compile the time zone compiler
`zic' supplied with this package instead of using the system `zic',
since the format of zic's input changed slightly in late 1994,
and many vendors still do not support the new input format.
* The UNIX Version 7 "timezone" function is not present in this package;
it's impossible to reliably map timezone's arguments (a "minutes west
of GMT" value and a "daylight saving time in effect" flag) to a
time zone abbreviation, and we refuse to guess.
Programs that in the past used the timezone function may now examine
tzname[localtime(&clock)->tm_isdst] to learn the correct time
zone abbreviation to use. Alternatively, use
localtime(&clock)->tm_zone if this has been enabled.
* The 4.2BSD gettimeofday function is not used in this package.
This formerly let users obtain the current UTC offset and DST flag,
but this functionality was removed in later versions of BSD.
* In SVR2, time conversion fails for near-minimum or near-maximum
time_t values when doing conversions for places that don't use UTC.
This package takes care to do these conversions correctly.
The functions that are conditionally compiled if STD_INSPIRED is defined
should, at this point, be looked on primarily as food for thought. They are
not in any sense "standard compatible"--some are not, in fact, specified in
*any* standard. They do, however, represent responses of various authors to
standardization proposals.
Other time conversion proposals, in particular the one developed by folks at
Hewlett Packard, offer a wider selection of functions that provide capabilities
beyond those provided here. The absence of such functions from this package
is not meant to discourage the development, standardization, or use of such
functions. Rather, their absence reflects the decision to make this package
contain valid extensions to POSIX, to ensure its broad acceptability. If
more powerful time conversion functions can be standardized, so much the
better.
----- Names of time zone rule files -----
The time zone rule file naming conventions attempt to strike a balance
among the following goals:
* Uniquely identify every national region where clocks have all
agreed since 1970. This is essential for the intended use: static
clocks keeping local civil time.
* Indicate to humans as to where that region is. This simplifes use.
* Be robust in the presence of political changes. This reduces the
number of updates and backward-compatibility hacks. For example,
names of countries are ordinarily not used, to avoid
incompatibilities when countries change their name
(e.g. Zaire->Congo) or when locations change countries
(e.g. Hong Kong from UK colony to China).
* Be portable to a wide variety of implementations.
This promotes use of the technology.
* Use a consistent naming convention over the entire world.
This simplifies both use and maintenance.
This naming convention is not intended for use by inexperienced users
to select TZ values by themselves (though they can of course examine
and reuse existing settings). Distributors should provide
documentation and/or a simple selection interface that explains the
names; see the 'tzselect' program supplied with this distribution for
one example.
Names normally have the form AREA/LOCATION, where AREA is the name
of a continent or ocean, and LOCATION is the name of a specific
location within that region. North and South America share the same
area, `America'. Typical names are `Africa/Cairo', `America/New_York',
and `Pacific/Honolulu'.
Here are the general rules used for choosing location names,
in decreasing order of importance:
Use only valid POSIX file name components (i.e., the parts of
names other than `/'). Within a file name component,
use only ASCII letters, `.', `-' and `_'. Do not use
digits, as that might create an ambiguity with POSIX
TZ strings. A file name component must not exceed 14
characters or start with `-'. E.g., prefer `Brunei'
to `Bandar_Seri_Begawan'.
Include at least one location per time zone rule set per country.
One such location is enough. Use ISO 3166 (see the file
iso3166.tab) to help decide whether something is a country.
However, uninhabited ISO 3166 regions like Bouvet Island
do not need locations, since local time is not defined there.
If all the clocks in a country's region have agreed since 1970,
don't bother to include more than one location
even if subregions' clocks disagreed before 1970.
Otherwise these tables would become annoyingly large.
If a name is ambiguous, use a less ambiguous alternative;
e.g. many cities are named San Jose and Georgetown, so
prefer `Costa_Rica' to `San_Jose' and `Guyana' to `Georgetown'.
Keep locations compact. Use cities or small islands, not countries
or regions, so that any future time zone changes do not split
locations into different time zones. E.g. prefer `Paris'
to `France', since France has had multiple time zones.
Use mainstream English spelling, e.g. prefer `Rome' to `Roma', and
prefer `Athens' to the true name (which uses Greek letters).
The POSIX file name restrictions encourage this rule.
Use the most populous among locations in a country's time zone,
e.g. prefer `Shanghai' to `Beijing'. Among locations with
similar populations, pick the best-known location,
e.g. prefer `Rome' to `Milan'.
Use the singular form, e.g. prefer `Canary' to `Canaries'.
Omit common suffixes like `_Islands' and `_City', unless that
would lead to ambiguity. E.g. prefer `Cayman' to
`Cayman_Islands' and `Guatemala' to `Guatemala_City',
but prefer `Mexico_City' to `Mexico' because the country
of Mexico has several time zones.
Use `_' to represent a space.
Omit `.' from abbreviations in names, e.g. prefer `St_Helena'
to `St._Helena'.
Do not change established names if they only marginally
violate the above rules. For example, don't change
the existing name `Rome' to `Milan' merely because
Milan's population has grown to be somewhat greater
than Rome's.
If a name is changed, put its old spelling in the `backward' file.
The file `zone.tab' lists the geographical locations used to name
time zone rule files. It is intended to be an exhaustive list
of canonical names for geographic regions.
Older versions of this package used a different naming scheme,
and these older names are still supported.
See the file `backward' for most of these older names
(e.g. `US/Eastern' instead of `America/New_York').
The other old-fashioned names still supported are
`WET', `CET', `MET', `EET' (see the file `europe'),
and `Factory' (see the file `factory').
----- Time zone abbreviations -----
When this package is installed, it generates time zone abbreviations
like `EST' to be compatible with human tradition and POSIX.
Here are the general rules used for choosing time zone abbreviations,
in decreasing order of importance:
Use abbreviations that consist of three or more ASCII letters.
Previous editions of this database also used characters like
' ' and '?', but these characters have a special meaning to
the shell and cause commands like
set `date`
to have unexpected effects.
Previous editions of this rule required upper-case letters,
but the Congressman who introduced Chamorro Standard Time
preferred "ChST", so the rule has been relaxed.
This rule guarantees that all abbreviations could have
been specified by a POSIX TZ string. POSIX
requires at least three characters for an
abbreviation. POSIX through 2000 says that an abbreviation
cannot start with ':', and cannot contain ',', '-',
'+', NUL, or a digit. POSIX from 2001 on changes this
rule to say that an abbreviation can contain only '-', '+',
and alphanumeric characters from the portable character set
in the current locale. To be portable to both sets of
rules, an abbreviation must therefore use only ASCII
letters.
Use abbreviations that are in common use among English-speakers,
e.g. `EST' for Eastern Standard Time in North America.
We assume that applications translate them to other languages
as part of the normal localization process; for example,
a French application might translate `EST' to `HNE'.
For zones whose times are taken from a city's longitude, use the
traditional xMT notation, e.g. `PMT' for Paris Mean Time.
The only name like this in current use is `GMT'.
If there is no common English abbreviation, abbreviate the English
translation of the usual phrase used by native speakers.
If this is not available or is a phrase mentioning the country
(e.g. ``Cape Verde Time''), then:
When a country has a single or principal time zone region,
append `T' to the country's ISO code, e.g. `CVT' for
Cape Verde Time. For summer time append `ST';
for double summer time append `DST'; etc.
When a country has multiple time zones, take the first three
letters of an English place name identifying each zone
and then append `T', `ST', etc. as before;
e.g. `VLAST' for VLAdivostok Summer Time.
Use UTC (with time zone abbreviation "zzz") for locations while
uninhabited. The "zzz" mnemonic is that these locations are,
in some sense, asleep.
Application writers should note that these abbreviations are ambiguous
in practice: e.g. `EST' has a different meaning in Australia than
it does in the United States. In new applications, it's often better
to use numeric UTC offsets like `-0500' instead of time zone
abbreviations like `EST'; this avoids the ambiguity.
----- Calendrical issues -----
Calendrical issues are a bit out of scope for a time zone database,
but they indicate the sort of problems that we would run into if we
extended the time zone database further into the past. An excellent
resource in this area is Edward M. Reingold and Nachum Dershowitz,
<a href="http://emr.cs.uiuc.edu/home/reingold/calendar-book/second-edition/">
Calendrical Calculations: The Millennium Edition
</a>, Cambridge University Press (2001). Other information and
sources are given below. They sometimes disagree.
France
Gregorian calendar adopted 1582-12-20.
French Revolutionary calendar used 1793-11-24 through 1805-12-31,
and (in Paris only) 1871-05-06 through 1871-05-23.
Russia
From Chris Carrier (1996-12-02):
On 1929-10-01 the Soviet Union instituted an ``Eternal Calendar''
with 30-day months plus 5 holidays, with a 5-day week.
On 1931-12-01 it changed to a 6-day week; in 1934 it reverted to the
Gregorian calendar while retaining the 6-day week; on 1940-06-27 it
reverted to the 7-day week. With the 6-day week the usual days
off were the 6th, 12th, 18th, 24th and 30th of the month.
(Source: Evitiar Zerubavel, _The Seven Day Circle_)
Mark Brader reported a similar story in "The Book of Calendars", edited
by Frank Parise (1982, Facts on File, ISBN 0-8719-6467-8), page 377. But:
From: Petteri Sulonen (via Usenet)
Date: 14 Jan 1999 00:00:00 GMT
...
If your source is correct, how come documents between 1929 -- 1940 were
still dated using the conventional, Gregorian calendar?
I can post a scan of a document dated December 1, 1934, signed by
Yenukidze, the secretary, on behalf of Kalinin, the President of the
Executive Committee of the Supreme Soviet, if you like.
Sweden (and Finland)
From: Mark Brader
<a href="news:1996Jul6.012937.29190@sq.com">
Subject: Re: Gregorian reform -- a part of locale?
</a>
Date: 1996-07-06
In 1700, Denmark made the transition from Julian to Gregorian. Sweden
decided to *start* a transition in 1700 as well, but rather than have one of
those unsightly calendar gaps :-), they simply decreed that the next leap
year after 1696 would be in 1744 -- putting the whole country on a calendar
different from both Julian and Gregorian for a period of 40 years.
However, in 1704 something went wrong and the plan was not carried through;
they did, after all, have a leap year that year. And one in 1708. In 1712
they gave it up and went back to Julian, putting 30 days in February that
year!...
Then in 1753, Sweden made the transition to Gregorian in the usual manner,
getting there only 13 years behind the original schedule.
(A previous posting of this story was challenged, and Swedish readers
produced the following references to support it: "Tiderakning och historia"
by Natanael Beckman (1924) and "Tid, en bok om tiderakning och
kalendervasen" by Lars-Olof Lode'n (no date was given).)
Grotefend's data
From: "Michael Palmer" [with one obvious typo fixed]
Subject: Re: Gregorian Calendar (was Re: Another FHC related question
Newsgroups: soc.genealogy.german
Date: Tue, 9 Feb 1999 02:32:48 -800
...
The following is a(n incomplete) listing, arranged chronologically, of
European states, with the date they converted from the Julian to the
Gregorian calendar:
04/15 Oct 1582 - Italy (with exceptions), Spain, Portugal, Poland (Roman
Catholics and Danzig only)
09/20 Dec 1582 - France, Lorraine
21 Dec 1582/
01 Jan 1583 - Holland, Brabant, Flanders, Hennegau
10/21 Feb 1583 - bishopric of Liege (L"uttich)
13/24 Feb 1583 - bishopric of Augsburg
04/15 Oct 1583 - electorate of Trier
05/16 Oct 1583 - Bavaria, bishoprics of Freising, Eichstedt, Regensburg,
Salzburg, Brixen
13/24 Oct 1583 - Austrian Oberelsass and Breisgau
20/31 Oct 1583 - bishopric of Basel
02/13 Nov 1583 - duchy of J"ulich-Berg
02/13 Nov 1583 - electorate and city of K"oln
04/15 Nov 1583 - bishopric of W"urzburg
11/22 Nov 1583 - electorate of Mainz
16/27 Nov 1583 - bishopric of Strassburg and the margraviate of Baden
17/28 Nov 1583 - bishopric of M"unster and duchy of Cleve
14/25 Dec 1583 - Steiermark
06/17 Jan 1584 - Austria and Bohemia
11/22 Jan 1584 - Luzern, Uri, Schwyz, Zug, Freiburg, Solothurn
12/23 Jan 1584 - Silesia and the Lausitz
22 Jan/
02 Feb 1584 - Hungary (legally on 21 Oct 1587)
Jun 1584 - Unterwalden
01/12 Jul 1584 - duchy of Westfalen
16/27 Jun 1585 - bishopric of Paderborn
14/25 Dec 1590 - Transylvania
22 Aug/
02 Sep 1612 - duchy of Prussia
13/24 Dec 1614 - Pfalz-Neuburg
1617 - duchy of Kurland (reverted to the Julian calendar in
1796)
1624 - bishopric of Osnabr"uck
1630 - bishopric of Minden
15/26 Mar 1631 - bishopric of Hildesheim
1655 - Kanton Wallis
05/16 Feb 1682 - city of Strassburg
18 Feb/
01 Mar 1700 - Protestant Germany (including Swedish possessions in
Germany), Denmark, Norway
30 Jun/
12 Jul 1700 - Gelderland, Zutphen
10 Nov/
12 Dec 1700 - Utrecht, Overijssel
31 Dec 1700/
12 Jan 1701 - Friesland, Groningen, Z"urich, Bern, Basel, Geneva,
Turgau, and Schaffhausen
1724 - Glarus, Appenzell, and the city of St. Gallen
01 Jan 1750 - Pisa and Florence
02/14 Sep 1752 - Great Britain
17 Feb/
01 Mar 1753 - Sweden
1760-1812 - Graub"unden
The Russian empire (including Finland and the Baltic states) did not
convert to the Gregorian calendar until the Soviet revolution of 1917.
Source: H. Grotefend, _Taschenbuch der Zeitrechnung des deutschen
Mittelalters und der Neuzeit_, herausgegeben von Dr. O. Grotefend
(Hannover: Hahnsche Buchhandlung, 1941), pp. 26-28.
----- Time and time zones on Mars -----
Some people have adjusted their work schedules to fit Mars time.
Dozens of special Mars watches were built for Jet Propulsion
Laboratory workers who kept Mars time during the Mars Exploration
Rovers mission (2004). These timepieces look like normal Seikos and
Citizens but use Mars seconds rather than terrestrial seconds.
A Mars solar day is called a "sol" and has a mean period equal to
about 24 hours 39 minutes 35.244 seconds in terrestrial time. It is
divided into a conventional 24-hour clock, so each Mars second equals
about 1.02749125 terrestrial seconds.
The prime meridian of Mars goes through the center of the crater
Airy-0, named in honor of the British astronomer who built the
Greenwich telescope that defines Earth's prime meridian. Mean solar
time on the Mars prime meridian is called Mars Coordinated Time (MTC).
Each landed mission on Mars has adopted a different reference for
solar time keeping, so there is no real standard for Mars time zones.
For example, the Mars Exploration Rover project (2004) defined two
time zones "Local Solar Time A" and "Local Solar Time B" for its two
missions, each zone designed so that its time equals local true solar
time at approximately the middle of the nominal mission. Such a "time
zone" is not particularly suited for any application other than the
mission itself.
Many calendars have been proposed for Mars, but none have achieved
wide acceptance. Astronomers often use Mars Sol Date (MSD) which is a
sequential count of Mars solar days elapsed since about 1873-12-29
12:00 GMT.
The tz database does not currently support Mars time, but it is
documented here in the hopes that support will be added eventually.
Sources:
Michael Allison and Robert Schmunk,
"Technical Notes on Mars Solar Time as Adopted by the Mars24 Sunclock"
<http://www.giss.nasa.gov/tools/mars24/help/notes.html> (2004-07-30).
Jia-Rui Chong, "Workdays Fit for a Martian", Los Angeles Times
(2004-01-14), pp A1, A20-A21.

641
commands/zoneinfo/africa Normal file
View file

@ -0,0 +1,641 @@
# @(#)africa 8.7
# <pre>
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
# From Paul Eggert (2006-03-22):
#
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
# Association's Standard Schedules Information Manual (IATA SSIM),
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
# Except where otherwise noted, Shanks & Pottenger is the source for
# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
# I found in the UCLA library.
#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
# Previous editions of this database used WAT, CAT, SAT, and EAT
# for +0:00 through +3:00, respectively,
# but Mark R V Murray reports that
# `SAST' is the official abbreviation for +2:00 in the country of South Africa,
# `CAT' is commonly used for +2:00 in countries north of South Africa, and
# `WAT' is probably the best name for +1:00, as the common phrase for
# the area that includes Nigeria is ``West Africa''.
# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.
#
# To make things confusing, `WAT' seems to have been used for -1:00 long ago;
# I'd guess that this was because people needed _some_ name for -1:00,
# and at the time, far west Africa was the only major land area in -1:00.
# This usage is now obsolete, as the last use of -1:00 on the African
# mainland seems to have been 1976 in Western Sahara.
#
# To summarize, the following abbreviations seem to have some currency:
# -1:00 WAT West Africa Time (no longer used)
# 0:00 GMT Greenwich Mean Time
# 2:00 CAT Central Africa Time
# 2:00 SAST South Africa Standard Time
# and Murray suggests the following abbreviation:
# 1:00 WAT West Africa Time
# I realize that this leads to `WAT' being used for both -1:00 and 1:00
# for times before 1976, but this is the best I can think of
# until we get more information.
#
# I invented the following abbreviations; corrections are welcome!
# 2:00 WAST West Africa Summer Time
# 2:30 BEAT British East Africa Time (no longer used)
# 2:44:45 BEAUT British East Africa Unified Time (no longer used)
# 3:00 CAST Central Africa Summer Time (no longer used)
# 3:00 SAST South Africa Summer Time (no longer used)
# 3:00 EAT East Africa Time
# 4:00 EAST East Africa Summer Time (no longer used)
# Algeria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Algeria 1916 only - Jun 14 23:00s 1:00 S
Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 -
Rule Algeria 1917 only - Mar 24 23:00s 1:00 S
Rule Algeria 1918 only - Mar 9 23:00s 1:00 S
Rule Algeria 1919 only - Mar 1 23:00s 1:00 S
Rule Algeria 1920 only - Feb 14 23:00s 1:00 S
Rule Algeria 1920 only - Oct 23 23:00s 0 -
Rule Algeria 1921 only - Mar 14 23:00s 1:00 S
Rule Algeria 1921 only - Jun 21 23:00s 0 -
Rule Algeria 1939 only - Sep 11 23:00s 1:00 S
Rule Algeria 1939 only - Nov 19 1:00 0 -
Rule Algeria 1944 1945 - Apr Mon>=1 2:00 1:00 S
Rule Algeria 1944 only - Oct 8 2:00 0 -
Rule Algeria 1945 only - Sep 16 1:00 0 -
Rule Algeria 1971 only - Apr 25 23:00s 1:00 S
Rule Algeria 1971 only - Sep 26 23:00s 0 -
Rule Algeria 1977 only - May 6 0:00 1:00 S
Rule Algeria 1977 only - Oct 21 0:00 0 -
Rule Algeria 1978 only - Mar 24 1:00 1:00 S
Rule Algeria 1978 only - Sep 22 3:00 0 -
Rule Algeria 1980 only - Apr 25 0:00 1:00 S
Rule Algeria 1980 only - Oct 31 2:00 0 -
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
# more precise 0:09:21.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
0:00 Algeria WE%sT 1940 Feb 25 2:00
1:00 Algeria CE%sT 1946 Oct 7
0:00 - WET 1956 Jan 29
1:00 - CET 1963 Apr 14
0:00 Algeria WE%sT 1977 Oct 21
1:00 Algeria CE%sT 1979 Oct 26
0:00 Algeria WE%sT 1981 May
1:00 - CET
# Angola
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Luanda 0:52:56 - LMT 1892
0:52:04 - AOT 1911 May 26 # Angola Time
1:00 - WAT
# Benin
# Whitman says they switched to 1:00 in 1946, not 1934;
# go with Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Porto-Novo 0:10:28 - LMT 1912
0:00 - GMT 1934 Feb 26
1:00 - WAT
# Botswana
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Gaborone 1:43:40 - LMT 1885
2:00 - CAT 1943 Sep 19 2:00
2:00 1:00 CAST 1944 Mar 19 2:00
2:00 - CAT
# Burkina Faso
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Ouagadougou -0:06:04 - LMT 1912
0:00 - GMT
# Burundi
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Bujumbura 1:57:28 - LMT 1890
2:00 - CAT
# Cameroon
# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Douala 0:38:48 - LMT 1912
1:00 - WAT
# Cape Verde
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
-2:00 - CVT 1942 Sep
-2:00 1:00 CVST 1945 Oct 15
-2:00 - CVT 1975 Nov 25 2:00
-1:00 - CVT
# Central African Republic
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Bangui 1:14:20 - LMT 1912
1:00 - WAT
# Chad
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Ndjamena 1:00:12 - LMT 1912
1:00 - WAT 1979 Oct 14
1:00 1:00 WAST 1980 Mar 8
1:00 - WAT
# Comoros
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro
3:00 - EAT
# Democratic Republic of Congo
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9
1:00 - WAT
Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9
2:00 - CAT
# Republic of the Congo
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Brazzaville 1:01:08 - LMT 1912
1:00 - WAT
# Cote D'Ivoire
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Abidjan -0:16:08 - LMT 1912
0:00 - GMT
# Djibouti
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul
3:00 - EAT
###############################################################################
# Egypt
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Egypt 1940 only - Jul 15 0:00 1:00 S
Rule Egypt 1940 only - Oct 1 0:00 0 -
Rule Egypt 1941 only - Apr 15 0:00 1:00 S
Rule Egypt 1941 only - Sep 16 0:00 0 -
Rule Egypt 1942 1944 - Apr 1 0:00 1:00 S
Rule Egypt 1942 only - Oct 27 0:00 0 -
Rule Egypt 1943 1945 - Nov 1 0:00 0 -
Rule Egypt 1945 only - Apr 16 0:00 1:00 S
Rule Egypt 1957 only - May 10 0:00 1:00 S
Rule Egypt 1957 1958 - Oct 1 0:00 0 -
Rule Egypt 1958 only - May 1 0:00 1:00 S
Rule Egypt 1959 1981 - May 1 1:00 1:00 S
Rule Egypt 1959 1965 - Sep 30 3:00 0 -
Rule Egypt 1966 1994 - Oct 1 3:00 0 -
Rule Egypt 1982 only - Jul 25 1:00 1:00 S
Rule Egypt 1983 only - Jul 12 1:00 1:00 S
Rule Egypt 1984 1988 - May 1 1:00 1:00 S
Rule Egypt 1989 only - May 6 1:00 1:00 S
Rule Egypt 1990 1994 - May 1 1:00 1:00 S
# IATA (after 1990) says transitions are at 0:00.
# Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29.
Rule Egypt 1995 max - Apr lastFri 0:00s 1:00 S
Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 -
# From Steffen Thorsen (2006-09-19):
# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
# Egypt will turn back clocks by one hour at the midnight of Thursday
# after observing the daylight saving time since May.
# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
Rule Egypt 2006 only - Sep 21 23:00s 0 -
Rule Egypt 2007 max - Sep lastThu 23:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Cairo 2:05:00 - LMT 1900 Oct
2:00 Egypt EE%sT
# Equatorial Guinea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Malabo 0:35:08 - LMT 1912
0:00 - GMT 1963 Dec 15
1:00 - WAT
# Eritrea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Asmara 2:35:32 - LMT 1870
2:35:32 - AMT 1890 # Asmara Mean Time
2:35:20 - ADMT 1936 May 5 # Adis Dera MT
3:00 - EAT
# Ethiopia
# From Paul Eggert (2006-03-22):
# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
# We'll guess that 38E50 is for Adis Dera.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Addis_Ababa 2:34:48 - LMT 1870
2:35:20 - ADMT 1936 May 5 # Adis Dera MT
3:00 - EAT
# Gabon
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Libreville 0:37:48 - LMT 1912
1:00 - WAT
# Gambia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Banjul -1:06:36 - LMT 1912
-1:06:36 - BMT 1935 # Banjul Mean Time
-1:00 - WAT 1964
0:00 - GMT
# Ghana
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# Whitman says DST was observed from 1931 to ``the present'';
# go with Shanks & Pottenger.
Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST
Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Accra -0:00:52 - LMT 1918
0:00 Ghana %s
# Guinea
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Conakry -0:54:52 - LMT 1912
0:00 - GMT 1934 Feb 26
-1:00 - WAT 1960
0:00 - GMT
# Guinea-Bissau
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Bissau -1:02:20 - LMT 1911 May 26
-1:00 - WAT 1975
0:00 - GMT
# Kenya
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul
3:00 - EAT 1930
2:30 - BEAT 1940
2:44:45 - BEAUT 1960
3:00 - EAT
# Lesotho
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
2:00 - SAST 1943 Sep 19 2:00
2:00 1:00 SAST 1944 Mar 19 2:00
2:00 - SAST
# Liberia
# From Paul Eggert (2006-03-22):
# In 1972 Liberia was the last country to switch
# from a UTC offset that was not a multiple of 15 or 20 minutes.
# Howse reports that it was in honor of their president's birthday.
# Shank & Pottenger report the date as May 1, whereas Howse reports Jan;
# go with Shanks & Pottenger.
# For Liberia before 1972, Shanks & Pottenger report -0:44, whereas Howse and
# Whitman each report -0:44:30; go with the more precise figure.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Monrovia -0:43:08 - LMT 1882
-0:43:08 - MMT 1919 Mar # Monrovia Mean Time
-0:44:30 - LRT 1972 May # Liberia Time
0:00 - GMT
###############################################################################
# Libya
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Libya 1951 only - Oct 14 2:00 1:00 S
Rule Libya 1952 only - Jan 1 0:00 0 -
Rule Libya 1953 only - Oct 9 2:00 1:00 S
Rule Libya 1954 only - Jan 1 0:00 0 -
Rule Libya 1955 only - Sep 30 0:00 1:00 S
Rule Libya 1956 only - Jan 1 0:00 0 -
Rule Libya 1982 1984 - Apr 1 0:00 1:00 S
Rule Libya 1982 1985 - Oct 1 0:00 0 -
Rule Libya 1985 only - Apr 6 0:00 1:00 S
Rule Libya 1986 only - Apr 4 0:00 1:00 S
Rule Libya 1986 only - Oct 3 0:00 0 -
Rule Libya 1987 1989 - Apr 1 0:00 1:00 S
Rule Libya 1987 1989 - Oct 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tripoli 0:52:44 - LMT 1920
1:00 Libya CE%sT 1959
2:00 - EET 1982
1:00 Libya CE%sT 1990 May 4
# The following entries are from Shanks & Pottenger;
# the IATA SSIM data contain some obvious errors.
2:00 - EET 1996 Sep 30
1:00 - CET 1997 Apr 4
1:00 1:00 CEST 1997 Oct 4
2:00 - EET
# Madagascar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul
3:00 - EAT 1954 Feb 27 23:00s
3:00 1:00 EAST 1954 May 29 23:00s
3:00 - EAT
# Malawi
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar
2:00 - CAT
# Mali
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Bamako -0:32:00 - LMT 1912
0:00 - GMT 1934 Feb 26
-1:00 - WAT 1960 Jun 20
0:00 - GMT
# Mauritania
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Nouakchott -1:03:48 - LMT 1912
0:00 - GMT 1934 Feb 26
-1:00 - WAT 1960 Nov 28
0:00 - GMT
# Mauritius
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
4:00 - MUT # Mauritius Time
# Agalega Is, Rodriguez
# no information; probably like Indian/Mauritius
# Mayotte
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
3:00 - EAT
# Morocco
# See the `europe' file for Spanish Morocco (Africa/Ceuta).
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Morocco 1939 only - Sep 12 0:00 1:00 S
Rule Morocco 1939 only - Nov 19 0:00 0 -
Rule Morocco 1940 only - Feb 25 0:00 1:00 S
Rule Morocco 1945 only - Nov 18 0:00 0 -
Rule Morocco 1950 only - Jun 11 0:00 1:00 S
Rule Morocco 1950 only - Oct 29 0:00 0 -
Rule Morocco 1967 only - Jun 3 12:00 1:00 S
Rule Morocco 1967 only - Oct 1 0:00 0 -
Rule Morocco 1974 only - Jun 24 0:00 1:00 S
Rule Morocco 1974 only - Sep 1 0:00 0 -
Rule Morocco 1976 1977 - May 1 0:00 1:00 S
Rule Morocco 1976 only - Aug 1 0:00 0 -
Rule Morocco 1977 only - Sep 28 0:00 0 -
Rule Morocco 1978 only - Jun 1 0:00 1:00 S
Rule Morocco 1978 only - Aug 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
0:00 Morocco WE%sT 1984 Mar 16
1:00 - CET 1986
0:00 - WET
# Western Sahara
Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan
-1:00 - WAT 1976 Apr 14
0:00 - WET
# Mozambique
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
2:00 - CAT
# Namibia
# The 1994-04-03 transition is from Shanks & Pottenger.
# Shanks & Pottenger report no DST after 1998-04; go with IATA.
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S
Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
1:30 - SWAT 1903 Mar # SW Africa Time
2:00 - SAST 1942 Sep 20 2:00
2:00 1:00 SAST 1943 Mar 21 2:00
2:00 - SAST 1990 Mar 21 # independence
2:00 - CAT 1994 Apr 3
1:00 Namibia WA%sT
# Niger
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Niamey 0:08:28 - LMT 1912
-1:00 - WAT 1934 Feb 26
0:00 - GMT 1960
1:00 - WAT
# Nigeria
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Lagos 0:13:36 - LMT 1919 Sep
1:00 - WAT
# Reunion
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
4:00 - RET # Reunion Time
#
# Scattered Islands (Iles Eparses) administered from Reunion are as follows.
# The following information about them is taken from
# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French;
# no longer available as of 1999-08-17).
# We have no info about their time zone histories.
#
# Bassas da India - uninhabited
# Europa Island - inhabited from 1905 to 1910 by two families
# Glorioso Is - inhabited until at least 1958
# Juan de Nova - uninhabited
# Tromelin - inhabited until at least 1958
# Rwanda
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Kigali 2:00:16 - LMT 1935 Jun
2:00 - CAT
# St Helena
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown
-0:22:48 - JMT 1951 # Jamestown Mean Time
0:00 - GMT
# The other parts of the St Helena territory are similar:
# Tristan da Cunha: on GMT, say Whitman and the CIA
# Ascension: on GMT, says usno1995 and the CIA
# Gough (scientific station since 1955; sealers wintered previously):
# on GMT, says the CIA
# Inaccessible, Nightingale: no information, but probably GMT
# Sao Tome and Principe
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Sao_Tome 0:26:56 - LMT 1884
-0:36:32 - LMT 1912 # Lisbon Mean Time
0:00 - GMT
# Senegal
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Dakar -1:09:44 - LMT 1912
-1:00 - WAT 1941 Jun
0:00 - GMT
# Seychelles
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
4:00 - SCT # Seychelles Time
# From Paul Eggert (2001-05-30):
# Aldabra, Farquhar, and Desroches, originally dependencies of the
# Seychelles, were transferred to the British Indian Ocean Territory
# in 1965 and returned to Seychelles control in 1976. We don't know
# whether this affected their time zone, so omit this for now.
# Possibly the islands were uninhabited.
# Sierra Leone
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
Rule SL 1935 1942 - Oct 1 0:00 0 WAT
Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
Rule SL 1957 1962 - Sep 1 0:00 0 GMT
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Freetown -0:53:00 - LMT 1882
-0:53:00 - FMT 1913 Jun # Freetown Mean Time
-1:00 SL %s 1957
0:00 SL %s
# Somalia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov
3:00 - EAT 1931
2:30 - BEAT 1957
3:00 - EAT
# South Africa
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 -
Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
1:30 - SAST 1903 Mar
2:00 SA SAST
# Marion and Prince Edward Is
# scientific station since 1947
# no information
# Sudan
#
# From <a href="http://www.sunanews.net/sn13jane.html">
# Sudan News Agency (2000-01-13)
# </a>, also reported by Michael De Beukelaer-Dossche via Steffen Thorsen:
# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon
# Saturday.... This was announced Thursday by Caretaker State Minister for
# Manpower Abdul-Rahman Nur-Eddin.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Sudan 1970 only - May 1 0:00 1:00 S
Rule Sudan 1970 1985 - Oct 15 0:00 0 -
Rule Sudan 1971 only - Apr 30 0:00 1:00 S
Rule Sudan 1972 1985 - Apr lastSun 0:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Khartoum 2:10:08 - LMT 1931
2:00 Sudan CA%sT 2000 Jan 15 12:00
3:00 - EAT
# Swaziland
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar
2:00 - SAST
# Tanzania
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931
3:00 - EAT 1948
2:44:45 - BEAUT 1961
3:00 - EAT
# Togo
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Lome 0:04:52 - LMT 1893
0:00 - GMT
# Tunisia
# From Gwillim Law (2005-04-30):
# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
# this time in Tunisia. According to Yahoo France News
# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
# and dated 2005-04-26, "Tunisia has decided to advance its official time by
# one hour, starting on Sunday, May 1. Henceforth, Tunisian time will be
# UTC+2 instead of UTC+1. The change will take place at 23:00 UTC next
# Saturday." (My translation)
#
# From Oscar van Vlijmen (2005-05-02):
# LaPresse, the first national daily newspaper ...
# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>
# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
# 1h standard time.
#
# From Atef Loukil (2006-03-28):
# The daylight saving time will be the same each year:
# Beginning : the last Sunday of March at 02:00
# Ending : the last Sunday of October at 03:00 ...
# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S
Rule Tunisia 1939 only - Nov 18 23:00s 0 -
Rule Tunisia 1940 only - Feb 25 23:00s 1:00 S
Rule Tunisia 1941 only - Oct 6 0:00 0 -
Rule Tunisia 1942 only - Mar 9 0:00 1:00 S
Rule Tunisia 1942 only - Nov 2 3:00 0 -
Rule Tunisia 1943 only - Mar 29 2:00 1:00 S
Rule Tunisia 1943 only - Apr 17 2:00 0 -
Rule Tunisia 1943 only - Apr 25 2:00 1:00 S
Rule Tunisia 1943 only - Oct 4 2:00 0 -
Rule Tunisia 1944 1945 - Apr Mon>=1 2:00 1:00 S
Rule Tunisia 1944 only - Oct 8 0:00 0 -
Rule Tunisia 1945 only - Sep 16 0:00 0 -
Rule Tunisia 1977 only - Apr 30 0:00s 1:00 S
Rule Tunisia 1977 only - Sep 24 0:00s 0 -
Rule Tunisia 1978 only - May 1 0:00s 1:00 S
Rule Tunisia 1978 only - Oct 1 0:00s 0 -
Rule Tunisia 1988 only - Jun 1 0:00s 1:00 S
Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S
Rule Tunisia 1990 only - May 1 0:00s 1:00 S
Rule Tunisia 2005 only - May 1 0:00s 1:00 S
Rule Tunisia 2005 only - Sep 30 1:00s 0 -
Rule Tunisia 2006 max - Mar lastSun 2:00s 1:00 S
Rule Tunisia 2006 max - Oct lastSun 2:00s 0 -
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
# more precise 0:09:21.
# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
1:00 Tunisia CE%sT
# Uganda
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Kampala 2:09:40 - LMT 1928 Jul
3:00 - EAT 1930
2:30 - BEAT 1948
2:44:45 - BEAUT 1957
3:00 - EAT
# Zambia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar
2:00 - CAT
# Zimbabwe
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Harare 2:04:12 - LMT 1903 Mar
2:00 - CAT

View file

@ -0,0 +1,325 @@
# @(#)antarctica 8.3
# <pre>
# From Paul Eggert (1999-11-15):
# To keep things manageable, we list only locations occupied year-round; see
# <a href="http://www.comnap.aq/comnap/comnap.nsf/P/Stations/">
# COMNAP - Stations and Bases
# </a>
# and
# <a href="http://www.spri.cam.ac.uk/bob/periant.htm">
# Summary of the Peri-Antarctic Islands (1998-07-23)
# </a>
# for information.
# Unless otherwise specified, we have no time zone information.
#
# Except for the French entries,
# I made up all time zone abbreviations mentioned here; corrections welcome!
# FORMAT is `zzz' and GMTOFF is 0 for locations while uninhabited.
# These rules are stolen from the `europe' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule RussAQ 1981 1984 - Apr 1 0:00 1:00 S
Rule RussAQ 1981 1983 - Oct 1 0:00 0 -
Rule RussAQ 1984 1991 - Sep lastSun 2:00s 0 -
Rule RussAQ 1985 1991 - Mar lastSun 2:00s 1:00 S
Rule RussAQ 1992 only - Mar lastSat 23:00 1:00 S
Rule RussAQ 1992 only - Sep lastSat 23:00 0 -
Rule RussAQ 1993 max - Mar lastSun 2:00s 1:00 S
Rule RussAQ 1993 1995 - Sep lastSun 2:00s 0 -
Rule RussAQ 1996 max - Oct lastSun 2:00s 0 -
# These rules are stolen from the `southamerica' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule ArgAQ 1964 1966 - Mar 1 0:00 0 -
Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S
Rule ArgAQ 1967 only - Apr 2 0:00 0 -
Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S
Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 -
Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S
Rule ArgAQ 1974 only - May 1 0:00 0 -
Rule ChileAQ 1972 1986 - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 1974 1987 - Oct Sun>=9 4:00u 1:00 S
Rule ChileAQ 1987 only - Apr 12 3:00u 0 -
Rule ChileAQ 1988 1989 - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 1988 only - Oct Sun>=1 4:00u 1:00 S
Rule ChileAQ 1989 only - Oct Sun>=9 4:00u 1:00 S
Rule ChileAQ 1990 only - Mar 18 3:00u 0 -
Rule ChileAQ 1990 only - Sep 16 4:00u 1:00 S
Rule ChileAQ 1991 1996 - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 1991 1997 - Oct Sun>=9 4:00u 1:00 S
Rule ChileAQ 1997 only - Mar 30 3:00u 0 -
Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S
Rule ChileAQ 1999 only - Apr 4 3:00u 0 -
Rule ChileAQ 1999 max - Oct Sun>=9 4:00u 1:00 S
Rule ChileAQ 2000 max - Mar Sun>=9 3:00u 0 -
# Argentina - year-round bases
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
# Esperanza, San Martin Land, -6323-05659, since 1952-12-17
# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01
# Marambio, Seymour I, -6414-05637, since 1969-10-29
# Orcadas, Laurie I, -6016-04444, since 1904-02-22
# San Martin, Debenham I, -6807-06708, since 1951-03-21
# (except 1960-03 / 1976-03-21)
# Australia - territories
# Heard Island, McDonald Islands (uninhabited)
# previously sealers and scientific personnel wintered
# <a href="http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html">
# Margaret Turner reports
# </a> (1999-09-30) that they're UTC+5, with no DST;
# presumably this is when they have visitors.
#
# year-round bases
# Casey, Bailey Peninsula, -6617+11032, since 1969
# Davis, Vestfold Hills, -6835+07759, since 1957-01-13
# (except 1964-11 - 1969-02)
# Mawson, Holme Bay, -6736+06253, since 1954-02-13
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Casey 0 - zzz 1969
8:00 - WST # Western (Aus) Standard Time
Zone Antarctica/Davis 0 - zzz 1957 Jan 13
7:00 - DAVT 1964 Nov # Davis Time
0 - zzz 1969 Feb
7:00 - DAVT
Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
6:00 - MAWT # Mawson Time
# References:
# <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html">
# Casey Weather (1998-02-26)
# </a>
# <a href="http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html">
# Davis Station, Antarctica (1998-02-26)
# </a>
# <a href="http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html">
# Mawson Station, Antarctica (1998-02-25)
# </a>
# Brazil - year-round base
# Comandante Ferraz, King George Island, -6205+05824, since 1983/4
# Chile - year-round bases and towns
# Escudero, South Shetland Is, -621157-0585735, since 1994
# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07
# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
# Capitan Arturo Prat, -6230-05941
# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
# These locations have always used Santiago time; use TZ='America/Santiago'.
# China - year-round bases
# Great Wall, King George Island, -6213-05858, since 1985-02-20
# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
# France - year-round bases
#
# From Antoine Leca (1997-01-20):
# Time data are from Nicole Pailleau at the IFRTP
# (French Institute for Polar Research and Technology).
# She confirms that French Southern Territories and Terre Adelie bases
# don't observe daylight saving time, even if Terre Adelie supplies came
# from Tasmania.
#
# French Southern Territories with year-round inhabitants
#
# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950
# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964
# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951;
# whaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956
#
# St Paul Island - near Amsterdam, uninhabited
# fishing stations operated variously 1819/1931
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais
5:00 - TFT # ISO code TF Time
#
# year-round base in the main continent
# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11
#
# Another base at Port-Martin, 50km east, began operation in 1947.
# It was destroyed by fire on 1952-01-14.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/DumontDUrville 0 - zzz 1947
10:00 - PMT 1952 Jan 14 # Port-Martin Time
0 - zzz 1956 Nov
10:00 - DDUT # Dumont-d'Urville Time
# Reference:
# <a href="http://en.wikipedia.org/wiki/Dumont_d'Urville_Station">
# Dumont d'Urville Station (2005-12-05)
# </a>
# Germany - year-round base
# Georg von Neumayer, -7039-00815
# India - year-round base
# Dakshin Gangotri, -7005+01200
# Japan - year-round bases
# Dome Fuji, -7719+03942
# Syowa, -690022+0393524
#
# From Hideyuki Suzuki (1999-02-06):
# In all Japanese stations, +0300 is used as the standard time.
#
# Syowa station, which is the first antarctic station of Japan,
# was established on 1957-01-29. Since Syowa station is still the main
# station of Japan, it's appropriate for the principal location.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
3:00 - SYOT # Syowa Time
# See:
# <a href="http://www.nipr.ac.jp/english/ara01.html">
# NIPR Antarctic Research Activities (1999-08-17)
# </a>
# S Korea - year-round base
# King Sejong, King George Island, -6213-05847, since 1988
# New Zealand - claims
# Balleny Islands (never inhabited)
# Scott Island (never inhabited)
#
# year-round base
# Scott, Ross Island, since 1957-01, is like Antarctica/McMurdo.
#
# These rules for New Zealand are stolen from the `australasia' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule NZAQ 1974 only - Nov 3 2:00s 1:00 D
Rule NZAQ 1975 1988 - Oct lastSun 2:00s 1:00 D
Rule NZAQ 1989 only - Oct 8 2:00s 1:00 D
Rule NZAQ 1990 max - Oct Sun>=1 2:00s 1:00 D
Rule NZAQ 1975 only - Feb 23 2:00s 0 S
Rule NZAQ 1976 1989 - Mar Sun>=1 2:00s 0 S
Rule NZAQ 1990 max - Mar Sun>=15 2:00s 0 S
# Norway - territories
# Bouvet (never inhabited)
#
# claims
# Peter I Island (never inhabited)
# Poland - year-round base
# Arctowski, King George Island, -620945-0582745, since 1977
# Russia - year-round bases
# Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
# Mirny, Davis coast, -6633+09301, since 1956-02
# Molodezhnaya, Alasheyev Bay, -6740+04551,
# year-round from 1962-02 to 1999-07-01
# Novolazarevskaya, Queen Maud Land, -7046+01150,
# year-round from 1960/61 to 1992
# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
# <a href="http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP">
# From Craig Mundell (1994-12-15)</a>:
# Vostok, which is one of the Russian stations, is set on the same
# time as Moscow, Russia.
#
# From Lee Hotz (2001-03-08):
# I queried the folks at Columbia who spent the summer at Vostok and this is
# what they had to say about time there:
# ``in the US Camp (East Camp) we have been on New Zealand (McMurdo)
# time, which is 12 hours ahead of GMT. The Russian Station Vostok was
# 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead
# of GMT). This is a time zone I think two hours east of Moscow. The
# natural time zone is in between the two: 8 hours ahead of GMT.''
#
# From Paul Eggert (2001-05-04):
# This seems to be hopelessly confusing, so I asked Lee Hotz about it
# in person. He said that some Antartic locations set their local
# time so that noon is the warmest part of the day, and that this
# changes during the year and does not necessarily correspond to mean
# solar noon. So the Vostok time might have been whatever the clocks
# happened to be during their visit. So we still don't really know what time
# it is at Vostok. But we'll guess UTC+6.
#
Zone Antarctica/Vostok 0 - zzz 1957 Dec 16
6:00 - VOST # Vostok time
# S Africa - year-round bases
# Marion Island, -4653+03752
# Sanae, -7141-00250
# UK
#
# British Antarctic Territories (BAT) claims
# South Orkney Islands
# scientific station from 1903
# whaling station at Signy I 1920/1926
# South Shetland Islands
#
# year-round bases
# Bird Island, South Georgia, -5400-03803, since 1983
# Deception Island, -6259-06034, whaling station 1912/1931,
# scientific station 1943/1967,
# previously sealers and a scientific expedition wintered by accident,
# and a garrison was deployed briefly
# Halley, Coates Land, -7535-02604, since 1956-01-06
# Halley is on a moving ice shelf and is periodically relocated
# so that it is never more than 10km from its nominal location.
# Rothera, Adelaide Island, -6734-6808, since 1976-12-01
#
# From Paul Eggert (2002-10-22)
# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Rothera 0 - zzz 1976 Dec 1
-3:00 - ROTT # Rothera time
# Uruguay - year round base
# Artigas, King George Island, -621104-0585107
# USA - year-round bases
#
# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
#
# From Ethan Dicks (1996-10-06):
# It keeps the same time as Punta Arenas, Chile, because, just like us
# and the South Pole, that's the other end of their supply line....
# I verified with someone who was there that since 1980,
# Palmer has followed Chile. Prior to that, before the Falklands War,
# Palmer used to be supplied from Argentina.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Palmer 0 - zzz 1965
-4:00 ArgAQ AR%sT 1969 Oct 5
-3:00 ArgAQ AR%sT 1982 May
-4:00 ChileAQ CL%sT
#
#
# McMurdo, Ross Island, since 1955-12
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/McMurdo 0 - zzz 1956
12:00 NZAQ NZ%sT
#
# Amundsen-Scott, South Pole, continuously occupied since 1956-11-20
#
# From Paul Eggert (1996-09-03):
# Normally it wouldn't have a separate entry, since it's like the
# larger Antarctica/McMurdo since 1970, but it's too famous to omit.
#
# From Chris Carrier (1996-06-27):
# Siple, the first commander of the South Pole station,
# stated that he would have liked to have kept GMT at the station,
# but that he found it more convenient to keep GMT+12
# as supplies for the station were coming from McMurdo Sound,
# which was on GMT+12 because New Zealand was on GMT+12 all year
# at that time (1957). (Source: Siple's book 90 degrees SOUTH.)
#
# From Susan Smith
# http://www.cybertours.com/whs/pole10.html
# (1995-11-13 16:24:56 +1300, no longer available):
# We use the same time as McMurdo does.
# And they use the same time as Christchurch, NZ does....
# One last quirk about South Pole time.
# All the electric clocks are usually wrong.
# Something about the generators running at 60.1hertz or something
# makes all of the clocks run fast. So every couple of days,
# we have to go around and set them back 5 minutes or so.
# Maybe if we let them run fast all of the time, we'd get to leave here sooner!!
#
Link Antarctica/McMurdo Antarctica/South_Pole

129
commands/zoneinfo/asctime.c Normal file
View file

@ -0,0 +1,129 @@
/*
** This file is in the public domain, so clarified as of
** 1996-06-05 by Arthur David Olson.
*/
/*
** Avoid the temptation to punt entirely to strftime;
** the output of strftime is supposed to be locale specific
** whereas the output of asctime is supposed to be constant.
*/
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)asctime.c 7.32";
#endif /* !defined NOID */
#endif /* !defined lint */
/*LINTLIBRARY*/
#include "private.h"
#include "tzfile.h"
/*
** Some systems only handle "%.2d"; others only handle "%02d";
** "%02.2d" makes (most) everybody happy.
** At least some versions of gcc warn about the %02.2d; ignore the warning.
*/
/*
** All years associated with 32-bit time_t values are exactly four digits long;
** some years associated with 64-bit time_t values are not.
** Vintage programs are coded for years that are always four digits long
** and may assume that the newline always lands in the same place.
** For years that are less than four digits, we pad the output with
** leading zeroes to get the newline in the traditional place.
** The -4 ensures that we get four characters of output even if
** we call a strftime variant that produces fewer characters for some years.
** The ISO C 1999 and POSIX 1003.1-2004 standards prohibit padding the year,
** but many implementations pad anyway; most likely the standards are buggy.
*/
#define ASCTIME_FMT "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %-4s\n"
/*
** For years that are more than four digits we put extra spaces before the year
** so that code trying to overwrite the newline won't end up overwriting
** a digit within a year and truncating the year (operating on the assumption
** that no output is better than wrong output).
*/
#define ASCTIME_FMT_B "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %s\n"
#define STD_ASCTIME_BUF_SIZE 26
/*
** Big enough for something such as
** ??? ???-2147483648 -2147483648:-2147483648:-2147483648 -2147483648\n
** (two three-character abbreviations, five strings denoting integers,
** seven explicit spaces, two explicit colons, a newline,
** and a trailing ASCII nul).
** The values above are for systems where an int is 32 bits and are provided
** as an example; the define below calculates the maximum for the system at
** hand.
*/
#define MAX_ASCTIME_BUF_SIZE (2*3+5*INT_STRLEN_MAXIMUM(int)+7+2+1+1)
static char buf_asctime[MAX_ASCTIME_BUF_SIZE];
/*
** A la ISO/IEC 9945-1, ANSI/IEEE Std 1003.1, 2004 Edition.
*/
char *
asctime_r(timeptr, buf)
register const struct tm * timeptr;
char * buf;
{
static const char wday_name[][3] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
static const char mon_name[][3] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
register const char * wn;
register const char * mn;
char year[INT_STRLEN_MAXIMUM(int) + 2];
char result[MAX_ASCTIME_BUF_SIZE];
if (timeptr->tm_wday < 0 || timeptr->tm_wday >= DAYSPERWEEK)
wn = "???";
else wn = wday_name[timeptr->tm_wday];
if (timeptr->tm_mon < 0 || timeptr->tm_mon >= MONSPERYEAR)
mn = "???";
else mn = mon_name[timeptr->tm_mon];
/*
** Use strftime's %Y to generate the year, to avoid overflow problems
** when computing timeptr->tm_year + TM_YEAR_BASE.
** Assume that strftime is unaffected by other out-of-range members
** (e.g., timeptr->tm_mday) when processing "%Y".
*/
(void) strftime(year, sizeof year, "%Y", timeptr);
/*
** We avoid using snprintf since it's not available on all systems.
*/
(void) sprintf(result,
((strlen(year) <= 4) ? ASCTIME_FMT : ASCTIME_FMT_B),
wn, mn,
timeptr->tm_mday, timeptr->tm_hour,
timeptr->tm_min, timeptr->tm_sec,
year);
if (strlen(result) < STD_ASCTIME_BUF_SIZE || buf == buf_asctime) {
(void) strcpy(buf, result);
return buf;
} else {
#ifdef EOVERFLOW
errno = EOVERFLOW;
#else /* !defined EOVERFLOW */
errno = EINVAL;
#endif /* !defined EOVERFLOW */
return NULL;
}
}
/*
** A la ISO/IEC 9945-1, ANSI/IEEE Std 1003.1, 2004 Edition.
*/
char *
asctime(timeptr)
register const struct tm * timeptr;
{
return asctime_r(timeptr, buf_asctime);
}

1787
commands/zoneinfo/asia Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

109
commands/zoneinfo/backward Normal file
View file

@ -0,0 +1,109 @@
# @(#)backward 8.3
# This file provides links between current names for time zones
# and their old names. Many names changed in late 1993.
Link Africa/Asmara Africa/Asmera
Link Africa/Bamako Africa/Timbuktu
Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
Link America/Adak America/Atka
Link America/Argentina/Buenos_Aires America/Buenos_Aires
Link America/Argentina/Catamarca America/Catamarca
Link America/Atikokan America/Coral_Harbour
Link America/Argentina/Cordoba America/Cordoba
Link America/Tijuana America/Ensenada
Link America/Indiana/Indianapolis America/Fort_Wayne
Link America/Indiana/Indianapolis America/Indianapolis
Link America/Argentina/Jujuy America/Jujuy
Link America/Indiana/Knox America/Knox_IN
Link America/Kentucky/Louisville America/Louisville
Link America/Argentina/Mendoza America/Mendoza
Link America/Rio_Branco America/Porto_Acre
Link America/Argentina/Cordoba America/Rosario
Link America/St_Thomas America/Virgin
Link Asia/Ashgabat Asia/Ashkhabad
Link Asia/Chongqing Asia/Chungking
Link Asia/Dhaka Asia/Dacca
Link Asia/Macau Asia/Macao
Link Asia/Jerusalem Asia/Tel_Aviv
Link Asia/Thimphu Asia/Thimbu
Link Asia/Makassar Asia/Ujung_Pandang
Link Asia/Ulaanbaatar Asia/Ulan_Bator
Link Atlantic/Faroe Atlantic/Faeroe
Link Australia/Sydney Australia/ACT
Link Australia/Sydney Australia/Canberra
Link Australia/Lord_Howe Australia/LHI
Link Australia/Sydney Australia/NSW
Link Australia/Darwin Australia/North
Link Australia/Brisbane Australia/Queensland
Link Australia/Adelaide Australia/South
Link Australia/Hobart Australia/Tasmania
Link Australia/Melbourne Australia/Victoria
Link Australia/Perth Australia/West
Link Australia/Broken_Hill Australia/Yancowinna
Link America/Rio_Branco Brazil/Acre
Link America/Noronha Brazil/DeNoronha
Link America/Sao_Paulo Brazil/East
Link America/Manaus Brazil/West
Link America/Halifax Canada/Atlantic
Link America/Winnipeg Canada/Central
Link America/Regina Canada/East-Saskatchewan
Link America/Toronto Canada/Eastern
Link America/Edmonton Canada/Mountain
Link America/St_Johns Canada/Newfoundland
Link America/Vancouver Canada/Pacific
Link America/Regina Canada/Saskatchewan
Link America/Whitehorse Canada/Yukon
Link America/Santiago Chile/Continental
Link Pacific/Easter Chile/EasterIsland
Link America/Havana Cuba
Link Africa/Cairo Egypt
Link Europe/Dublin Eire
Link Europe/London Europe/Belfast
Link Europe/Chisinau Europe/Tiraspol
Link Europe/London GB
Link Europe/London GB-Eire
Link Etc/GMT GMT+0
Link Etc/GMT GMT-0
Link Etc/GMT GMT0
Link Etc/GMT Greenwich
Link Asia/Hong_Kong Hongkong
Link Atlantic/Reykjavik Iceland
Link Asia/Tehran Iran
Link Asia/Jerusalem Israel
Link America/Jamaica Jamaica
Link Asia/Tokyo Japan
Link Pacific/Kwajalein Kwajalein
Link Africa/Tripoli Libya
Link America/Tijuana Mexico/BajaNorte
Link America/Mazatlan Mexico/BajaSur
Link America/Mexico_City Mexico/General
Link Pacific/Auckland NZ
Link Pacific/Chatham NZ-CHAT
Link America/Denver Navajo
Link Asia/Shanghai PRC
Link Pacific/Pago_Pago Pacific/Samoa
Link Pacific/Truk Pacific/Yap
Link Europe/Warsaw Poland
Link Europe/Lisbon Portugal
Link Asia/Taipei ROC
Link Asia/Seoul ROK
Link Asia/Singapore Singapore
Link Europe/Istanbul Turkey
Link Etc/UCT UCT
Link America/Anchorage US/Alaska
Link America/Adak US/Aleutian
Link America/Phoenix US/Arizona
Link America/Chicago US/Central
Link America/Indiana/Indianapolis US/East-Indiana
Link America/New_York US/Eastern
Link Pacific/Honolulu US/Hawaii
Link America/Indiana/Knox US/Indiana-Starke
Link America/Detroit US/Michigan
Link America/Denver US/Mountain
Link America/Los_Angeles US/Pacific
Link Pacific/Pago_Pago US/Samoa
Link Etc/UTC UTC
Link Etc/UTC Universal
Link Europe/Moscow W-SU
Link Etc/UTC Zulu

View file

@ -0,0 +1,159 @@
# Check tz tables for consistency.
# @(#)checktab.awk 1.7
# Contributed by Paul Eggert.
BEGIN {
FS = "\t"
if (!iso_table) iso_table = "iso3166.tab"
if (!zone_table) zone_table = "zone.tab"
if (!want_warnings) want_warnings = -1
while (getline <iso_table) {
iso_NR++
if ($0 ~ /^#/) continue
if (NF != 2) {
printf "%s:%d: wrong number of columns\n", \
iso_table, iso_NR >>"/dev/stderr"
status = 1
}
cc = $1
name = $2
if (cc !~ /^[A-Z][A-Z]$/) {
printf "%s:%d: invalid country code `%s'\n", \
iso_table, iso_NR, cc >>"/dev/stderr"
status = 1
}
if (cc <= cc0) {
if (cc == cc0) {
s = "duplicate";
} else {
s = "out of order";
}
printf "%s:%d: country code `%s' is %s\n", \
iso_table, iso_NR, cc, s \
>>"/dev/stderr"
status = 1
}
cc0 = cc
if (name2cc[name]) {
printf "%s:%d: `%s' and `%s' have the sname name\n", \
iso_table, iso_NR, name2cc[name], cc \
>>"/dev/stderr"
status = 1
}
name2cc[name] = cc
cc2name[cc] = name
cc2NR[cc] = iso_NR
}
zone_table = "zone.tab"
cc0 = ""
while (getline <zone_table) {
zone_NR++
if ($0 ~ /^#/) continue
if (NF != 3 && NF != 4) {
printf "%s:%d: wrong number of columns\n", \
zone_table, zone_NR >>"/dev/stderr"
status = 1
}
cc = $1
coordinates = $2
tz = $3
comments = $4
if (cc < cc0) {
printf "%s:%d: country code `%s' is out of order\n", \
zone_table, zone_NR, cc >>"/dev/stderr"
status = 1
}
cc0 = cc
if (tz2cc[tz]) {
printf "%s:%d: %s: duplicate TZ column\n", \
zone_table, zone_NR, tz >>"/dev/stderr"
status = 1
}
tz2cc[tz] = cc
tz2comments[tz] = comments
tz2NR[tz] = zone_NR
if (cc2name[cc]) {
cc_used[cc]++
} else {
printf "%s:%d: %s: unknown country code\n", \
zone_table, zone_NR, cc >>"/dev/stderr"
status = 1
}
if (coordinates !~ /^[-+][0-9][0-9][0-5][0-9][-+][01][0-9][0-9][0-5][0-9]$/ \
&& coordinates !~ /^[-+][0-9][0-9][0-5][0-9][0-5][0-9][-+][01][0-9][0-9][0-5][0-9][0-5][0-9]$/) {
printf "%s:%d: %s: invalid coordinates\n", \
zone_table, zone_NR, coordinates >>"/dev/stderr"
status = 1
}
}
for (tz in tz2cc) {
if (cc_used[tz2cc[tz]] == 1) {
if (tz2comments[tz]) {
printf "%s:%d: unnecessary comment `%s'\n", \
zone_table, tz2NR[tz], tz2comments[tz] \
>>"/dev/stderr"
status = 1
}
} else {
if (!tz2comments[tz]) {
printf "%s:%d: missing comment\n", \
zone_table, tz2NR[tz] >>"/dev/stderr"
status = 1
}
}
}
FS = " "
}
{
tz = ""
if ($1 == "Zone") tz = $2
if ($1 == "Link") {
# Ignore Link commands if source and destination basenames
# are identical, e.g. Europe/Istanbul versus Asia/Istanbul.
src = $2
dst = $3
while ((i = index(src, "/"))) src = substr(src, i+1)
while ((i = index(dst, "/"))) dst = substr(dst, i+1)
if (src != dst) tz = $3
}
if (tz && tz ~ /\//) {
if (!tz2cc[tz]) {
printf "%s: no data for `%s'\n", zone_table, tz \
>>"/dev/stderr"
status = 1
}
zoneSeen[tz] = 1
}
}
END {
for (tz in tz2cc) {
if (!zoneSeen[tz]) {
printf "%s:%d: no Zone table for `%s'\n", \
zone_table, tz2NR[tz], tz >>"/dev/stderr"
status = 1
}
}
if (0 < want_warnings) {
for (cc in cc2name) {
if (!cc_used[cc]) {
printf "%s:%d: warning: " \
"no Zone entries for %s (%s)\n", \
iso_table, cc2NR[cc], cc, cc2name[cc]
}
}
}
exit status
}

175
commands/zoneinfo/date.1 Normal file
View file

@ -0,0 +1,175 @@
.TH DATE 1
.SH NAME
date \- show and set date and time
.SH SYNOPSIS
.if n .nh
.if n .na
.B date
[
.B \-u
] [
.B \-c
] [
.B \-n
] [
.B \-d
dsttype
] [
.B \-t
minutes-west
] [
\fB\-a \fR[\fB+\fR|\fB-]\fIsss\fB.\fIfff\fR
] [
.BI + format
] [
\fR[\fIyyyy\fR]\fImmddhhmm\fR[\fIyy\fR][\fB.\fIss\fR]
]
.SH DESCRIPTION
.I Date
without arguments writes the date and time to the standard output in
the form
.ce 1
Wed Mar 8 14:54:40 EST 1989
.br
with
.B EST
replaced by the local time zone's abbreviation
(or by the abbreviation for the time zone specified in the
.B TZ
environment variable if set).
The exact output format depends on the locale.
.PP
If a command-line argument starts with a plus sign
.RB (` + '),
the rest of the argument is used as a
.I format
that controls what appears in the output.
In the format, when a percent sign
.RB (` % ')
appears,
it and the character after it are not output,
but rather identify part of the date or time
to be output in a particular way
(or identify a special character to output):
.nf
.sp
.if t .in +.5i
.if n .in +2
.ta \w'%M\0\0'u +\w'Wed Mar 8 14:54:40 EST 1989\0\0'u
Sample output Explanation
%a Wed Abbreviated weekday name*
%A Wednesday Full weekday name*
%b Mar Abbreviated month name*
%B March Full month name*
%c Wed Mar 08 14:54:40 1989 Date and time*
%C 19 Century
%d 08 Day of month (always two digits)
%D 03/08/89 Month/day/year (eight characters)
%e 8 Day of month (leading zero blanked)
%h Mar Abbreviated month name*
%H 14 24-hour-clock hour (two digits)
%I 02 12-hour-clock hour (two digits)
%j 067 Julian day number (three digits)
%k 2 12-hour-clock hour (leading zero blanked)
%l 14 24-hour-clock hour (leading zero blanked)
%m 03 Month number (two digits)
%M 54 Minute (two digits)
%n \\n newline character
%p PM AM/PM designation
%r 02:54:40 PM Hour:minute:second AM/PM designation
%R 14:54 Hour:minute
%S 40 Second (two digits)
%t \\t tab character
%T 14:54:40 Hour:minute:second
%U 10 Sunday-based week number (two digits)
%w 3 Day number (one digit, Sunday is 0)
%W 10 Monday-based week number (two digits)
%x 03/08/89 Date*
%X 14:54:40 Time*
%y 89 Last two digits of year
%Y 1989 Year in full
%Z EST Time zone abbreviation
%+ Wed Mar 8 14:54:40 EST 1989 Default output format*
.if t .in -.5i
.if n .in -2
* The exact output depends on the locale.
.sp
.fi
If a character other than one of those shown above appears after
a percent sign in the format,
that following character is output.
All other characters in the format are copied unchanged to the output;
a newline character is always added at the end of the output.
.PP
In Sunday-based week numbering,
the first Sunday of the year begins week 1;
days preceding it are part of ``week 0.''
In Monday-based week numbering,
the first Monday of the year begins week 1.
.PP
To set the date, use a command line argument with one of the following forms:
.nf
.if t .in +.5i
.if n .in +2
.ta \w'198903081454\0'u
1454 24-hour-clock hours (first two digits) and minutes
081454 Month day (first two digits), hours, and minutes
03081454 Month (two digits, January is 01), month day, hours, minutes
8903081454 Year, month, month day, hours, minutes
0308145489 Month, month day, hours, minutes, year
(on System V-compatible systems)
030814541989 Month, month day, hours, minutes, four-digit year
198903081454 Four-digit year, month, month day, hours, minutes
.if t .in -.5i
.if n .in -2
.fi
If the century, year, month, or month day is not given,
the current value is used.
Any of the above forms may be followed by a period and two digits that give
the seconds part of the new time; if no seconds are given, zero is assumed.
.PP
These options are available:
.TP
.BR \-u " or " \-c
Use UTC when setting and showing the date and time.
.TP
.B \-n
Do not notify other networked systems of the time change.
.TP
.BI "\-d " dsttype
Set the kernel-stored Daylight Saving Time type to the given value.
(The kernel-stored DST type is used mostly by ``old'' binaries.)
.TP
.BI "\-t " minutes-west
Set the kernel-stored ``minutes west of UTC'' value to the one given on the
command line.
(The kernel-stored DST type is used mostly by ``old'' binaries.)
.TP
.BI "\-a " adjustment
Change the time forward (or backward) by the number of seconds
(and fractions thereof) specified in the
.I adjustment\^
argument.
Either the seconds part or the fractions part of the argument (but not both)
may be omitted.
On BSD-based systems,
the adjustment is made by changing the rate at which time advances;
on System-V-based systems, the adjustment is made by changing the time.
.SH FILES
.ta \w'/usr/local/etc/zoneinfo/posixrules\0\0'u
/usr/lib/locale/\f2L\fP/LC_TIME description of time locale \f2L\fP
.br
/usr/local/etc/zoneinfo time zone information directory
.br
/usr/local/etc/zoneinfo/localtime local time zone file
.br
/usr/local/etc/zoneinfo/posixrules used with POSIX-style TZ's
.br
/usr/local/etc/zoneinfo/GMT for UTC leap seconds
.sp
If
.B /usr/local/etc/zoneinfo/GMT
is absent,
UTC leap seconds are loaded from
.BR /usr/local/etc/zoneinfo/posixrules .
.\" @(#)date.1 7.4

View file

@ -0,0 +1,128 @@
NAME
date - show and set date and time
SYNOPSIS
date [ -u ] [ -c ] [ -n ] [ -d dsttype ] [ -t minutes-west ]
[ -a [+|-]sss.fff ] [ +format ] [ [yyyy]mmddhhmm[yy][.ss] ]
DESCRIPTION
Date without arguments writes the date and time to the
standard output in the form
Wed Mar 8 14:54:40 EST 1989
with EST replaced by the local time zone's abbreviation (or
by the abbreviation for the time zone specified in the TZ
environment variable if set). The exact output format
depends on the locale.
If a command-line argument starts with a plus sign (`+'),
the rest of the argument is used as a format that controls
what appears in the output. In the format, when a percent
sign (`%') appears, it and the character after it are not
output, but rather identify part of the date or time to be
output in a particular way (or identify a special character
to output):
Sample output Explanation
%a Wed Abbreviated weekday name*
%A Wednesday Full weekday name*
%b Mar Abbreviated month name*
%B March Full month name*
%c Wed Mar 08 14:54:40 1989 Date and time*
%C 19 Century
%d 08 Day of month (always two digits)
%D 03/08/89 Month/day/year (eight characters)
%e 8 Day of month (leading zero blanked)
%h Mar Abbreviated month name*
%H 14 24-hour-clock hour (two digits)
%I 02 12-hour-clock hour (two digits)
%j 067 Julian day number (three digits)
%k 2 12-hour-clock hour (leading zero blanked)
%l 14 24-hour-clock hour (leading zero blanked)
%m 03 Month number (two digits)
%M 54 Minute (two digits)
%n \n newline character
%p PM AM/PM designation
%r 02:54:40 PM Hour:minute:second AM/PM designation
%R 14:54 Hour:minute
%S 40 Second (two digits)
%t \t tab character
%T 14:54:40 Hour:minute:second
%U 10 Sunday-based week number (two digits)
%w 3 Day number (one digit, Sunday is 0)
%W 10 Monday-based week number (two digits)
%x 03/08/89 Date*
%X 14:54:40 Time*
%y 89 Last two digits of year
%Y 1989 Year in full
%Z EST Time zone abbreviation
%+ Wed Mar 8 14:54:40 EST 1989 Default output format*
* The exact output depends on the locale.
If a character other than one of those shown above appears
after a percent sign in the format, that following character
is output. All other characters in the format are copied
unchanged to the output; a newline character is always added
at the end of the output.
In Sunday-based week numbering, the first Sunday of the year
begins week 1; days preceding it are part of ``week 0.'' In
Monday-based week numbering, the first Monday of the year
begins week 1.
To set the date, use a command line argument with one of the
following forms:
1454 24-hour-clock hours (first two digits) and minutes
081454 Month day (first two digits), hours, and minutes
03081454 Month (two digits, January is 01), month day, hours, minutes
8903081454 Year, month, month day, hours, minutes
0308145489 Month, month day, hours, minutes, year
(on System V-compatible systems)
030814541989 Month, month day, hours, minutes, four-digit year
198903081454 Four-digit year, month, month day, hours, minutes
If the century, year, month, or month day is not given, the
current value is used. Any of the above forms may be
followed by a period and two digits that give the seconds
part of the new time; if no seconds are given, zero is
assumed.
These options are available:
-u or -c
Use UTC when setting and showing the date and time.
-n Do not notify other networked systems of the time
change.
-d dsttype
Set the kernel-stored Daylight Saving Time type to the
given value. (The kernel-stored DST type is used
mostly by ``old'' binaries.)
-t minutes-west
Set the kernel-stored ``minutes west of UTC'' value to
the one given on the command line. (The kernel-stored
DST type is used mostly by ``old'' binaries.)
-a adjustment
Change the time forward (or backward) by the number of
seconds (and fractions thereof) specified in the
adjustment argument. Either the seconds part or the
fractions part of the argument (but not both) may be
omitted. On BSD-based systems, the adjustment is made
by changing the rate at which time advances; on
System-V-based systems, the adjustment is made by
changing the time.
FILES
/usr/lib/locale/L/LC_TIME description of time
locale L
/usr/local/etc/zoneinfo time zone information
directory
/usr/local/etc/zoneinfo/localtime local time zone file
/usr/local/etc/zoneinfo/posixrules used with POSIX-style
TZ's
/usr/local/etc/zoneinfo/GMT for UTC leap seconds
If /usr/local/etc/zoneinfo/GMT is absent, UTC leap seconds
are loaded from /usr/local/etc/zoneinfo/posixrules.

974
commands/zoneinfo/date.c Normal file
View file

@ -0,0 +1,974 @@
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)date.c 7.45";
/*
** Modified from the UCB version with the SCCS ID appearing below.
*/
#endif /* !defined NOID */
#endif /* !defined lint */
/*
* Copyright (c) 1985, 1987, 1988 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANT[A]BILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef lint
char copyright[] =
"@(#) Copyright (c) 1985, 1987, 1988 The Regents of the University of California.\n\
All rights reserved.\n";
#endif /* not lint */
#ifndef lint
static char sccsid[] = "@(#)date.c 4.23 (Berkeley) 9/20/88";
#endif /* not lint */
#include "private.h"
#if HAVE_ADJTIME || HAVE_SETTIMEOFDAY
#include "sys/time.h" /* for struct timeval, struct timezone */
#endif /* HAVE_ADJTIME || HAVE_SETTIMEOFDAY */
#include "locale.h"
#include "utmp.h" /* for OLD_TIME (or its absence) */
#if HAVE_UTMPX_H
#include "utmpx.h"
#endif
#ifndef OTIME_MSG
#define OTIME_MSG "old time"
#endif
#ifndef NTIME_MSG
#define NTIME_MSG "new time"
#endif
/*
** The two things date knows about time are. . .
*/
#ifndef TM_YEAR_BASE
#define TM_YEAR_BASE 1900
#endif /* !defined TM_YEAR_BASE */
#ifndef SECSPERMIN
#define SECSPERMIN 60
#endif /* !defined SECSPERMIN */
extern double atof();
extern char ** environ;
extern char * getlogin();
extern time_t mktime();
extern char * optarg;
extern int optind;
extern char * strchr();
extern time_t time();
extern char * tzname[2];
static int retval = EXIT_SUCCESS;
static void checkfinal P((const char *, int, time_t, time_t));
static int comptm P((const struct tm *, const struct tm *));
static time_t convert P((const char *, int, time_t));
static void display P((const char *));
static void dogmt P((void));
static void errensure P((void));
static void iffy P((time_t, time_t, const char *, const char *));
int main P((int, char**));
static const char * nondigit P((const char *));
static void oops P((const char *));
static void reset P((time_t, int));
static void timeout P((FILE *, const char *, const struct tm *));
static void usage P((void));
static void wildinput P((const char *, const char *,
const char *));
int
main(argc, argv)
const int argc;
char * argv[];
{
register const char * format;
register const char * value;
register const char * cp;
register int ch;
register int dousg;
register int aflag = 0;
register int dflag = 0;
register int nflag = 0;
register int tflag = 0;
register int minuteswest;
register int dsttime;
register double adjust;
time_t now;
time_t t;
INITIALIZE(dousg);
INITIALIZE(minuteswest);
INITIALIZE(dsttime);
INITIALIZE(adjust);
INITIALIZE(t);
#ifdef LC_ALL
(void) setlocale(LC_ALL, "");
#endif /* defined(LC_ALL) */
#if HAVE_GETTEXT
#ifdef TZ_DOMAINDIR
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined(TEXTDOMAINDIR) */
(void) textdomain(TZ_DOMAIN);
#endif /* HAVE_GETTEXT */
(void) time(&now);
format = value = NULL;
while ((ch = getopt(argc, argv, "ucnd:t:a:")) != EOF && ch != -1) {
switch (ch) {
default:
usage();
case 'u': /* do it in UTC */
case 'c':
dogmt();
break;
case 'n': /* don't set network */
nflag = 1;
break;
case 'd': /* daylight saving time */
if (dflag) {
(void) fprintf(stderr,
_("date: error: multiple -d's used"));
usage();
}
dflag = 1;
cp = optarg;
dsttime = atoi(cp);
if (*cp == '\0' || *nondigit(cp) != '\0')
wildinput(_("-t value"), optarg,
_("must be a non-negative number"));
break;
case 't': /* minutes west of UTC */
if (tflag) {
(void) fprintf(stderr,
_("date: error: multiple -t's used"));
usage();
}
tflag = 1;
cp = optarg;
minuteswest = atoi(cp);
if (*cp == '+' || *cp == '-')
++cp;
if (*cp == '\0' || *nondigit(cp) != '\0')
wildinput(_("-d value"), optarg,
_("must be a number"));
break;
case 'a': /* adjustment */
if (aflag) {
(void) fprintf(stderr,
_("date: error: multiple -a's used"));
usage();
}
aflag = 1;
cp = optarg;
adjust = atof(cp);
if (*cp == '+' || *cp == '-')
++cp;
if (*cp == '\0' || strcmp(cp, ".") == 0)
wildinput(_("-a value"), optarg,
_("must be a number"));
cp = nondigit(cp);
if (*cp == '.')
++cp;
if (*nondigit(cp) != '\0')
wildinput(_("-a value"), optarg,
_("must be a number"));
break;
}
}
while (optind < argc) {
cp = argv[optind++];
if (*cp == '+')
if (format == NULL)
format = cp + 1;
else {
(void) fprintf(stderr,
_("date: error: multiple formats in command line\n"));
usage();
}
else if (value == NULL)
value = cp;
else {
(void) fprintf(stderr,
_("date: error: multiple values in command line\n"));
usage();
}
}
if (value != NULL) {
/*
** This order ensures that "reasonable" twelve-digit inputs
** (such as 120203042006) won't be misinterpreted
** even if time_t's range all the way back to the thirteenth
** century. Do not change the order.
*/
t = convert(value, (dousg = TRUE), now);
if (t == -1)
t = convert(value, (dousg = FALSE), now);
if (t == -1) {
/*
** Out of range values,
** or time that falls in a DST transition hole?
*/
if ((cp = strchr(value, '.')) != NULL) {
/*
** Ensure that the failure of
** TZ=America/New_York date 8712312359.60
** doesn't get misdiagnosed. (It was
** TZ=America/New_York date 8712311859.60
** when the leap second was inserted.)
** The normal check won't work since
** the given time is valid in UTC.
*/
if (atoi(cp + 1) >= SECSPERMIN)
wildinput(_("time"), value,
_("out of range seconds given"));
}
dogmt();
t = convert(value, FALSE, now);
if (t == -1)
t = convert(value, TRUE, now);
wildinput(_("time"), value,
(t == -1) ?
_("out of range value given") :
_("time skipped when clock springs forward"));
}
}
/*
** Entire command line has now been checked.
*/
if (aflag) {
#if HAVE_ADJTIME
struct timeval tv;
tv.tv_sec = (int) adjust;
tv.tv_usec = (int) ((adjust - tv.tv_sec) * 1000000L);
if (adjtime(&tv, (struct timeval *) NULL) != 0)
oops("adjtime");
#endif /* HAVE_ADJTIME */
#if !HAVE_ADJTIME
reset((time_t) (now + adjust), nflag);
#endif /* !HAVE_ADJTIME */
/*
** Sun silently ignores everything else; we follow suit.
*/
exit(retval);
}
if (dflag || tflag) {
#if HAVE_SETTIMEOFDAY == 2
struct timezone tz;
if (!dflag || !tflag)
if (gettimeofday((struct timeval *) NULL, &tz) != 0)
oops("gettimeofday");
if (dflag)
tz.tz_dsttime = dsttime;
if (tflag)
tz.tz_minuteswest = minuteswest;
if (settimeofday((struct timeval *) NULL, &tz) != 0)
oops("settimeofday");
#endif /* HAVE_SETTIMEOFDAY == 2 */
#if HAVE_SETTIMEOFDAY != 2
(void) fprintf(stderr,
_("date: warning: kernel doesn't keep -d/-t information, option ignored\n"));
#endif /* HAVE_SETTIMEOFDAY != 2 */
}
if (value == NULL)
display(format);
reset(t, nflag);
checkfinal(value, dousg, t, now);
#ifdef EBUG
{
struct tm tm;
tm = *localtime(&t);
timeout(stdout, "%c\n", &tm);
exit(retval);
}
#endif /* defined EBUG */
display(format);
/* gcc -Wall pacifier */
for ( ; ; )
continue;
}
static void
dogmt()
{
static char ** fakeenv;
if (fakeenv == NULL) {
register int from;
register int to;
register int n;
static char tzegmt0[] = "TZ=GMT0";
for (n = 0; environ[n] != NULL; ++n)
continue;
fakeenv = (char **) malloc((size_t) (n + 2) * sizeof *fakeenv);
if (fakeenv == NULL) {
(void) perror(_("Memory exhausted"));
errensure();
exit(retval);
}
to = 0;
fakeenv[to++] = tzegmt0;
for (from = 1; environ[from] != NULL; ++from)
if (strncmp(environ[from], "TZ=", 3) != 0)
fakeenv[to++] = environ[from];
fakeenv[to] = NULL;
environ = fakeenv;
}
}
#ifdef OLD_TIME
/*
** We assume we're on a System-V-based system,
** should use stime,
** should write System-V-format utmp entries,
** and don't have network notification to worry about.
*/
#include "fcntl.h" /* for O_WRONLY, O_APPEND */
/*ARGSUSED*/
static void
#if __STDC__
reset(const time_t newt, const int nflag)
#else /* !__STDC__ */
reset(newt, nflag)
const time_t newt;
const int nflag;
#endif /* !__STDC__ */
{
register int fid;
time_t oldt;
static struct {
struct utmp before;
struct utmp after;
} s;
#if HAVE_UTMPX_H
static struct {
struct utmpx before;
struct utmpx after;
} sx;
#endif
/*
** Wouldn't it be great if stime returned the old time?
*/
(void) time(&oldt);
if (stime(&newt) != 0)
oops("stime");
s.before.ut_type = OLD_TIME;
s.before.ut_time = oldt;
(void) strcpy(s.before.ut_line, OTIME_MSG);
s.after.ut_type = NEW_TIME;
s.after.ut_time = newt;
(void) strcpy(s.after.ut_line, NTIME_MSG);
fid = open(WTMP_FILE, O_WRONLY | O_APPEND);
if (fid < 0)
oops(_("log file open"));
if (write(fid, (char *) &s, sizeof s) != sizeof s)
oops(_("log file write"));
if (close(fid) != 0)
oops(_("log file close"));
#if !HAVE_UTMPX_H
pututline(&s.before);
pututline(&s.after);
#endif /* !HAVE_UTMPX_H */
#if HAVE_UTMPX_H
sx.before.ut_type = OLD_TIME;
sx.before.ut_tv.tv_sec = oldt;
(void) strcpy(sx.before.ut_line, OTIME_MSG);
sx.after.ut_type = NEW_TIME;
sx.after.ut_tv.tv_sec = newt;
(void) strcpy(sx.after.ut_line, NTIME_MSG);
#if !SUPPRESS_WTMPX_FILE_UPDATE
/* In Solaris 2.5 (and presumably other systems),
`date' does not update /var/adm/wtmpx.
This must be a bug. If you'd like to reproduce the bug,
define SUPPRESS_WTMPX_FILE_UPDATE to be nonzero. */
fid = open(WTMPX_FILE, O_WRONLY | O_APPEND);
if (fid < 0)
oops(_("log file open"));
if (write(fid, (char *) &sx, sizeof sx) != sizeof sx)
oops(_("log file write"));
if (close(fid) != 0)
oops(_("log file close"));
#endif /* !SUPPRESS_WTMPX_FILE_UPDATE */
pututxline(&sx.before);
pututxline(&sx.after);
#endif /* HAVE_UTMPX_H */
}
#endif /* defined OLD_TIME */
#ifndef OLD_TIME
/*
** We assume we're on a BSD-based system,
** should use settimeofday,
** should write BSD-format utmp entries (using logwtmp),
** and may get to worry about network notification.
** The "time name" changes between 4.3-tahoe and 4.4;
** we include sys/param.h to determine which we should use.
*/
#ifndef TIME_NAME
#include "sys/param.h"
#ifdef BSD4_4
#define TIME_NAME "date"
#endif /* defined BSD4_4 */
#ifndef BSD4_4
#define TIME_NAME ""
#endif /* !defined BSD4_4 */
#endif /* !defined TIME_NAME */
#include "syslog.h"
#include "sys/socket.h"
#include "netinet/in.h"
#include "netdb.h"
#define TSPTYPES
#include "protocols/timed.h"
extern int logwtmp();
#if HAVE_SETTIMEOFDAY == 1
#define settimeofday(t, tz) (settimeofday)(t)
#endif /* HAVE_SETTIMEOFDAY == 1 */
#ifndef TSP_SETDATE
/*ARGSUSED*/
#endif /* !defined TSP_SETDATE */
static void
reset(newt, nflag)
const time_t newt;
const int nflag;
{
register const char * username;
static struct timeval tv; /* static so tv_usec is 0 */
#ifdef EBUG
return;
#endif /* defined EBUG */
username = getlogin();
if (username == NULL || *username == '\0') /* single-user or no tty */
username = "root";
tv.tv_sec = newt;
#ifdef TSP_SETDATE
if (nflag || !netsettime(tv))
#endif /* defined TSP_SETDATE */
{
/*
** "old" entry is always written, for compatibility.
*/
logwtmp("|", TIME_NAME, "");
if (settimeofday(&tv, (struct timezone *) NULL) == 0) {
logwtmp("{", TIME_NAME, ""); /* } */
syslog(LOG_AUTH | LOG_NOTICE, _("date set by %s"),
username);
} else oops("settimeofday");
}
}
#endif /* !defined OLD_TIME */
static void
wildinput(item, value, reason)
const char * const item;
const char * const value;
const char * const reason;
{
(void) fprintf(stderr,
_("date: error: bad command line %s \"%s\", %s\n"),
item, value, reason);
usage();
}
static void
errensure P((void))
{
if (retval == EXIT_SUCCESS)
retval = EXIT_FAILURE;
}
static const char *
nondigit(cp)
register const char * cp;
{
while (is_digit(*cp))
++cp;
return cp;
}
static void
usage P((void))
{
(void) fprintf(stderr, _("date: usage is date [-u] [-c] [-n] [-d dst] \
[-t min-west] [-a sss.fff] [[yyyy]mmddhhmm[yyyy][.ss]] [+format]\n"));
errensure();
exit(retval);
}
static void
oops(string)
const char * const string;
{
int e = errno;
(void) fprintf(stderr, _("date: error: "));
errno = e;
(void) perror(string);
errensure();
display((char *) NULL);
}
static void
display(format)
const char * const format;
{
struct tm tm;
time_t now;
(void) time(&now);
tm = *localtime(&now);
timeout(stdout, format ? format : "%+", &tm);
(void) putchar('\n');
(void) fflush(stdout);
(void) fflush(stderr);
if (ferror(stdout) || ferror(stderr)) {
(void) fprintf(stderr,
_("date: error: couldn't write results\n"));
errensure();
}
exit(retval);
}
extern size_t strftime();
#define INCR 1024
static void
timeout(fp, format, tmp)
FILE * const fp;
const char * const format;
const struct tm * const tmp;
{
char * cp;
size_t result;
size_t size;
if (*format == '\0')
return;
size = INCR;
cp = malloc((size_t) size);
for ( ; ; ) {
if (cp == NULL) {
(void) fprintf(stderr,
_("date: error: can't get memory\n"));
errensure();
exit(retval);
}
cp[0] = '\1';
result = strftime(cp, size, format, tmp);
if (result != 0 || cp[0] == '\0')
break;
size += INCR;
cp = realloc(cp, (size_t) size);
}
(void) fwrite(cp, 1, result, fp);
free(cp);
}
static int
comptm(atmp, btmp)
register const struct tm * const atmp;
register const struct tm * const btmp;
{
register int result;
if ((result = (atmp->tm_year - btmp->tm_year)) == 0 &&
(result = (atmp->tm_mon - btmp->tm_mon)) == 0 &&
(result = (atmp->tm_mday - btmp->tm_mday)) == 0 &&
(result = (atmp->tm_hour - btmp->tm_hour)) == 0 &&
(result = (atmp->tm_min - btmp->tm_min)) == 0)
result = atmp->tm_sec - btmp->tm_sec;
return result;
}
/*
** convert --
** convert user's input into a time_t.
*/
#define ATOI2(ar) (ar[0] - '0') * 10 + (ar[1] - '0'); ar += 2;
static time_t
#if __STDC__
convert(register const char * const value, const int dousg, const time_t t)
#else /* !__STDC__ */
convert(value, dousg, t)
register const char * const value;
const int dousg;
const time_t t;
#endif /* !__STDC__ */
{
register const char * cp;
register const char * dotp;
register int cent, year_in_cent, month, hour, day, mins, secs;
struct tm tm, outtm;
time_t outt;
tm = *localtime(&t);
#define DIVISOR 100
year_in_cent = tm.tm_year % DIVISOR + TM_YEAR_BASE % DIVISOR;
cent = tm.tm_year / DIVISOR + TM_YEAR_BASE / DIVISOR +
year_in_cent / DIVISOR;
year_in_cent %= DIVISOR;
if (year_in_cent < 0) {
year_in_cent += DIVISOR;
--cent;
}
month = tm.tm_mon + 1;
day = tm.tm_mday;
hour = tm.tm_hour;
mins = tm.tm_min;
secs = 0;
dotp = strchr(value, '.');
for (cp = value; *cp != '\0'; ++cp)
if (!is_digit(*cp) && cp != dotp)
wildinput(_("time"), value, _("contains a nondigit"));
if (dotp == NULL)
dotp = strchr(value, '\0');
else {
cp = dotp + 1;
if (strlen(cp) != 2)
wildinput(_("time"), value,
_("seconds part is not two digits"));
secs = ATOI2(cp);
}
cp = value;
switch (dotp - cp) {
default:
wildinput(_("time"), value,
_("main part is wrong length"));
case 12:
if (!dousg) {
cent = ATOI2(cp);
year_in_cent = ATOI2(cp);
}
month = ATOI2(cp);
day = ATOI2(cp);
hour = ATOI2(cp);
mins = ATOI2(cp);
if (dousg) {
cent = ATOI2(cp);
year_in_cent = ATOI2(cp);
}
break;
case 8: /* mmddhhmm */
month = ATOI2(cp);
/* fall through to. . . */
case 6: /* ddhhmm */
day = ATOI2(cp);
/* fall through to. . . */
case 4: /* hhmm */
hour = ATOI2(cp);
mins = ATOI2(cp);
break;
case 10:
if (!dousg) {
year_in_cent = ATOI2(cp);
}
month = ATOI2(cp);
day = ATOI2(cp);
hour = ATOI2(cp);
mins = ATOI2(cp);
if (dousg) {
year_in_cent = ATOI2(cp);
}
break;
}
tm.tm_year = cent * 100 + year_in_cent - TM_YEAR_BASE;
tm.tm_mon = month - 1;
tm.tm_mday = day;
tm.tm_hour = hour;
tm.tm_min = mins;
tm.tm_sec = secs;
tm.tm_isdst = -1;
outtm = tm;
outt = mktime(&outtm);
return (comptm(&tm, &outtm) == 0) ? outt : -1;
}
/*
** Code from here on out is either based on code provided by UCB
** or is only called just before the program exits.
*/
/*
** Check for iffy input.
*/
static void
#if __STDC__
checkfinal(const char * const value,
const int didusg,
const time_t t,
const time_t oldnow)
#else /* !__STDC__ */
checkfinal(value, didusg, t, oldnow)
const char * const value;
const int didusg;
const time_t t;
const time_t oldnow;
#endif /* !__STDC__ */
{
time_t othert;
struct tm tm;
struct tm othertm;
register int pass;
register long offset;
/*
** See if there's both a USG and a BSD interpretation.
*/
othert = convert(value, !didusg, oldnow);
if (othert != -1 && othert != t)
iffy(t, othert, value, _("year could be at start or end"));
/*
** See if there's both a DST and a STD version.
*/
tm = *localtime(&t);
othertm = tm;
othertm.tm_isdst = !tm.tm_isdst;
othert = mktime(&othertm);
if (othert != -1 && othertm.tm_isdst != tm.tm_isdst &&
comptm(&tm, &othertm) == 0)
iffy(t, othert, value,
_("both standard and summer time versions exist"));
/*
** Final check.
**
** If a jurisdiction shifts time *without* shifting whether time is
** summer or standard (as Hawaii, the United Kingdom, and Saudi Arabia
** have done), routine checks for iffy times may not work.
** So we perform this final check, deferring it until after the time has
** been set--it may take a while, and we don't want to introduce an unnecessary
** lag between the time the user enters their command and the time that
** stime/settimeofday is called.
**
** We just check nearby times to see if any have the same representation
** as the time that convert returned. We work our way out from the center
** for quick response in solar time situations. We only handle common cases--
** offsets of at most a minute, and offsets of exact numbers of minutes
** and at most an hour.
*/
for (offset = 1; offset <= 60; ++offset)
for (pass = 1; pass <= 4; ++pass) {
if (pass == 1)
othert = t + offset;
else if (pass == 2)
othert = t - offset;
else if (pass == 3)
othert = t + 60 * offset;
else othert = t - 60 * offset;
othertm = *localtime(&othert);
if (comptm(&tm, &othertm) == 0)
iffy(t, othert, value,
_("multiple matching times exist"));
}
}
static void
#if __STDC__
iffy(const time_t thist, const time_t thatt,
const char * const value, const char * const reason)
#else /* !__STDC__ */
iffy(thist, thatt, value, reason)
const time_t thist;
const time_t thatt;
const char * const value;
const char * const reason;
#endif /* !__STDC__ */
{
struct tm tm;
(void) fprintf(stderr, _("date: warning: ambiguous time \"%s\", %s.\n"),
value, reason);
tm = *gmtime(&thist);
/*
** Avoid running afoul of SCCS!
*/
timeout(stderr, _("Time was set as if you used\n\tdate -u %m%d%H\
%M\
%Y.%S\n"), &tm);
tm = *localtime(&thist);
timeout(stderr, _("to get %c"), &tm);
(void) fprintf(stderr, _(" (%s). Use\n"),
tm.tm_isdst ? _("summer time") : _("standard time"));
tm = *gmtime(&thatt);
timeout(stderr, _("\tdate -u %m%d%H\
%M\
%Y.%S\n"), &tm);
tm = *localtime(&thatt);
timeout(stderr, _("to get %c"), &tm);
(void) fprintf(stderr, _(" (%s).\n"),
tm.tm_isdst ? _("summer time") : _("standard time"));
errensure();
exit(retval);
}
#ifdef TSP_SETDATE
#define WAITACK 2 /* seconds */
#define WAITDATEACK 5 /* seconds */
/*
* Set the date in the machines controlled by timedaemons
* by communicating the new date to the local timedaemon.
* If the timedaemon is in the master state, it performs the
* correction on all slaves. If it is in the slave state, it
* notifies the master that a correction is needed.
* Returns 1 on success, 0 on failure.
*/
netsettime(ntv)
struct timeval ntv;
{
int s, length, port, timed_ack, found, err;
long waittime;
fd_set ready;
char hostname[MAXHOSTNAMELEN];
struct timeval tout;
struct servent *sp;
struct tsp msg;
struct sockaddr_in sin, dest, from;
sp = getservbyname("timed", "udp");
if (sp == 0) {
fputs(_("udp/timed: unknown service\n"), stderr);
retval = 2;
return (0);
}
dest.sin_port = sp->s_port;
dest.sin_family = AF_INET;
dest.sin_addr.s_addr = htonl((u_long)INADDR_ANY);
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s < 0) {
if (errno != EPROTONOSUPPORT)
perror("date: socket");
goto bad;
}
bzero((char *)&sin, sizeof (sin));
sin.sin_family = AF_INET;
for (port = IPPORT_RESERVED - 1; port > IPPORT_RESERVED / 2; port--) {
sin.sin_port = htons((u_short)port);
if (bind(s, (struct sockaddr *)&sin, sizeof (sin)) >= 0)
break;
if (errno != EADDRINUSE) {
if (errno != EADDRNOTAVAIL)
perror("date: bind");
goto bad;
}
}
if (port == IPPORT_RESERVED / 2) {
fputs(_("date: All ports in use\n"), stderr);
goto bad;
}
msg.tsp_type = TSP_SETDATE;
msg.tsp_vers = TSPVERSION;
if (gethostname(hostname, sizeof (hostname))) {
perror("gethostname");
goto bad;
}
(void) strncpy(msg.tsp_name, hostname, sizeof (hostname));
msg.tsp_seq = htons((u_short)0);
msg.tsp_time.tv_sec = htonl((u_long)ntv.tv_sec);
msg.tsp_time.tv_usec = htonl((u_long)ntv.tv_usec);
length = sizeof (struct sockaddr_in);
if (connect(s, &dest, length) < 0) {
perror("date: connect");
goto bad;
}
if (send(s, (char *)&msg, sizeof (struct tsp), 0) < 0) {
if (errno != ECONNREFUSED)
perror("date: send");
goto bad;
}
timed_ack = -1;
waittime = WAITACK;
loop:
tout.tv_sec = waittime;
tout.tv_usec = 0;
FD_ZERO(&ready);
FD_SET(s, &ready);
found = select(FD_SETSIZE, &ready, (fd_set *)0, (fd_set *)0, &tout);
length = sizeof err;
if (getsockopt(s, SOL_SOCKET, SO_ERROR, (char *)&err, &length) == 0
&& err) {
errno = err;
if (errno != ECONNREFUSED)
perror(_("date: send (delayed error)"));
goto bad;
}
if (found > 0 && FD_ISSET(s, &ready)) {
length = sizeof (struct sockaddr_in);
if (recvfrom(s, (char *)&msg, sizeof (struct tsp), 0, &from,
&length) < 0) {
if (errno != ECONNREFUSED)
perror("date: recvfrom");
goto bad;
}
msg.tsp_seq = ntohs(msg.tsp_seq);
msg.tsp_time.tv_sec = ntohl(msg.tsp_time.tv_sec);
msg.tsp_time.tv_usec = ntohl(msg.tsp_time.tv_usec);
switch (msg.tsp_type) {
case TSP_ACK:
timed_ack = TSP_ACK;
waittime = WAITDATEACK;
goto loop;
case TSP_DATEACK:
(void)close(s);
return (1);
default:
fprintf(stderr,
_("date: Wrong ack received from timed: %s\n"),
tsptype[msg.tsp_type]);
timed_ack = -1;
break;
}
}
if (timed_ack == -1)
fputs(_("date: Can't reach time daemon, time set locally.\n"),
stderr);
bad:
(void)close(s);
retval = 2;
return (0);
}
#endif /* defined TSP_SETDATE */

View file

@ -0,0 +1,65 @@
/*
** This file is in the public domain, so clarified as of
** 1996-06-05 by Arthur David Olson.
*/
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)difftime.c 7.19";
#endif /* !defined NOID */
#endif /* !defined lint */
/*LINTLIBRARY*/
#include "private.h" /* for time_t, TYPE_INTEGRAL, and TYPE_SIGNED */
double
difftime(time1, time0)
const time_t time1;
const time_t time0;
{
/*
** If (sizeof (double) > sizeof (time_t)) simply convert and subtract
** (assuming that the larger type has more precision).
** This is the common real-world case circa 2004.
*/
if (sizeof (double) > sizeof (time_t))
return (double) time1 - (double) time0;
if (!TYPE_INTEGRAL(time_t)) {
/*
** time_t is floating.
*/
return time1 - time0;
}
if (!TYPE_SIGNED(time_t)) {
/*
** time_t is integral and unsigned.
** The difference of two unsigned values can't overflow
** if the minuend is greater than or equal to the subtrahend.
*/
if (time1 >= time0)
return time1 - time0;
else return -((double) (time0 - time1));
}
/*
** time_t is integral and signed.
** Handle cases where both time1 and time0 have the same sign
** (meaning that their difference cannot overflow).
*/
if ((time1 < 0) == (time0 < 0))
return time1 - time0;
/*
** time1 and time0 have opposite signs.
** Punt if unsigned long is too narrow.
*/
if (sizeof (unsigned long) < sizeof (time_t))
return (double) time1 - (double) time0;
/*
** Stay calm...decent optimizers will eliminate the complexity below.
*/
if (time1 >= 0 /* && time0 < 0 */)
return (unsigned long) time1 +
(unsigned long) (-(time0 + 1)) + 1;
return -(double) ((unsigned long) time0 +
(unsigned long) (-(time1 + 1)) + 1);
}

View file

@ -0,0 +1,80 @@
# @(#)etcetera 8.1
# These entries are mostly present for historical reasons, so that
# people in areas not otherwise covered by the tz files could "zic -l"
# to a time zone that was right for their area. These days, the
# tz files cover almost all the inhabited world, and the only practical
# need now for the entries that are not on UTC are for ships at sea
# that cannot use POSIX TZ settings.
Zone Etc/GMT 0 - GMT
Zone Etc/UTC 0 - UTC
Zone Etc/UCT 0 - UCT
# The following link uses older naming conventions,
# but it belongs here, not in the file `backward',
# as functions like gmtime load the "GMT" file to handle leap seconds properly.
# We want this to work even on installations that omit the other older names.
Link Etc/GMT GMT
Link Etc/UTC Etc/Universal
Link Etc/UTC Etc/Zulu
Link Etc/GMT Etc/Greenwich
Link Etc/GMT Etc/GMT-0
Link Etc/GMT Etc/GMT+0
Link Etc/GMT Etc/GMT0
# We use POSIX-style signs in the Zone names and the output abbreviations,
# even though this is the opposite of what many people expect.
# POSIX has positive signs west of Greenwich, but many people expect
# positive signs east of Greenwich. For example, TZ='Etc/GMT+4' uses
# the abbreviation "GMT+4" and corresponds to 4 hours behind UTC
# (i.e. west of Greenwich) even though many people would expect it to
# mean 4 hours ahead of UTC (i.e. east of Greenwich).
#
# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation
# (which is not yet supported by the tz code) allows for
# TZ='<GMT-4>+4'; if you want time zone abbreviations conforming to
# ISO 8601 you can use TZ='<-0400>+4'. Thus the commonly-expected
# offset is kept within the angle bracket (and is used for display)
# while the POSIX sign is kept outside the angle bracket (and is used
# for calculation).
#
# Do not use a TZ setting like TZ='GMT+4', which is four hours behind
# GMT but uses the completely misleading abbreviation "GMT".
# Earlier incarnations of this package were not POSIX-compliant,
# and had lines such as
# Zone GMT-12 -12 - GMT-1200
# We did not want things to change quietly if someone accustomed to the old
# way does a
# zic -l GMT-12
# so we moved the names into the Etc subdirectory.
Zone Etc/GMT-14 14 - GMT-14 # 14 hours ahead of GMT
Zone Etc/GMT-13 13 - GMT-13
Zone Etc/GMT-12 12 - GMT-12
Zone Etc/GMT-11 11 - GMT-11
Zone Etc/GMT-10 10 - GMT-10
Zone Etc/GMT-9 9 - GMT-9
Zone Etc/GMT-8 8 - GMT-8
Zone Etc/GMT-7 7 - GMT-7
Zone Etc/GMT-6 6 - GMT-6
Zone Etc/GMT-5 5 - GMT-5
Zone Etc/GMT-4 4 - GMT-4
Zone Etc/GMT-3 3 - GMT-3
Zone Etc/GMT-2 2 - GMT-2
Zone Etc/GMT-1 1 - GMT-1
Zone Etc/GMT+1 -1 - GMT+1
Zone Etc/GMT+2 -2 - GMT+2
Zone Etc/GMT+3 -3 - GMT+3
Zone Etc/GMT+4 -4 - GMT+4
Zone Etc/GMT+5 -5 - GMT+5
Zone Etc/GMT+6 -6 - GMT+6
Zone Etc/GMT+7 -7 - GMT+7
Zone Etc/GMT+8 -8 - GMT+8
Zone Etc/GMT+9 -9 - GMT+9
Zone Etc/GMT+10 -10 - GMT+10
Zone Etc/GMT+11 -11 - GMT+11
Zone Etc/GMT+12 -12 - GMT+12

2519
commands/zoneinfo/europe Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,8 @@
# @(#)factory 8.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"

View file

@ -0,0 +1,99 @@
#
/*LINTLIBRARY*/
#include "stdio.h"
#ifndef lint
#ifndef NOID
static char sccsid[] = "@(#)ialloc.c 7.14";
#endif /* !NOID */
#endif /* !lint */
#ifndef alloc_t
#define alloc_t unsigned
#endif /* !alloc_t */
#ifdef MAL
#define NULLMAL(x) ((x) == NULL || (x) == MAL)
#else /* !MAL */
#define NULLMAL(x) ((x) == NULL)
#endif /* !MAL */
extern char * calloc();
extern char * malloc();
extern char * realloc();
extern char * strcpy();
char *
imalloc(n)
{
#ifdef MAL
register char * result;
if (n == 0)
n = 1;
result = malloc((alloc_t) n);
return (result == MAL) ? NULL : result;
#else /* !MAL */
if (n == 0)
n = 1;
return malloc((alloc_t) n);
#endif /* !MAL */
}
char *
icalloc(nelem, elsize)
{
if (nelem == 0 || elsize == 0)
nelem = elsize = 1;
return calloc((alloc_t) nelem, (alloc_t) elsize);
}
char *
irealloc(pointer, size)
char * pointer;
{
if (NULLMAL(pointer))
return imalloc(size);
if (size == 0)
size = 1;
return realloc(pointer, (alloc_t) size);
}
char *
icatalloc(old, new)
char * old;
char * new;
{
register char * result;
register oldsize, newsize;
oldsize = NULLMAL(old) ? 0 : strlen(old);
newsize = NULLMAL(new) ? 0 : strlen(new);
if ((result = irealloc(old, oldsize + newsize + 1)) != NULL)
if (!NULLMAL(new))
(void) strcpy(result + oldsize, new);
return result;
}
char *
icpyalloc(string)
char * string;
{
return icatalloc((char *) NULL, string);
}
ifree(p)
char * p;
{
if (!NULLMAL(p))
free(p);
}
icfree(p)
char * p;
{
if (!NULLMAL(p))
free(p);
}

View file

@ -0,0 +1,267 @@
# ISO 3166 alpha-2 country codes
#
# @(#)iso3166.tab 8.4
#
# From Paul Eggert (2006-09-27):
#
# This file contains a table with the following columns:
# 1. ISO 3166-1 alpha-2 country code, current as of
# ISO 3166-1 Newsletter No. V-12 (2006-09-26). See:
# <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/index.html">
# ISO 3166 Maintenance agency (ISO 3166/MA)
# </a>.
# 2. The usual English name for the country,
# chosen so that alphabetic sorting of subsets produces helpful lists.
# This is not the same as the English name in the ISO 3166 tables.
#
# Columns are separated by a single tab.
# The table is sorted by country code.
#
# Lines beginning with `#' are comments.
#
#country-
#code country name
AD Andorra
AE United Arab Emirates
AF Afghanistan
AG Antigua & Barbuda
AI Anguilla
AL Albania
AM Armenia
AN Netherlands Antilles
AO Angola
AQ Antarctica
AR Argentina
AS Samoa (American)
AT Austria
AU Australia
AW Aruba
AX Aaland Islands
AZ Azerbaijan
BA Bosnia & Herzegovina
BB Barbados
BD Bangladesh
BE Belgium
BF Burkina Faso
BG Bulgaria
BH Bahrain
BI Burundi
BJ Benin
BM Bermuda
BN Brunei
BO Bolivia
BR Brazil
BS Bahamas
BT Bhutan
BV Bouvet Island
BW Botswana
BY Belarus
BZ Belize
CA Canada
CC Cocos (Keeling) Islands
CD Congo (Dem. Rep.)
CF Central African Rep.
CG Congo (Rep.)
CH Switzerland
CI Cote d'Ivoire
CK Cook Islands
CL Chile
CM Cameroon
CN China
CO Colombia
CR Costa Rica
CU Cuba
CV Cape Verde
CX Christmas Island
CY Cyprus
CZ Czech Republic
DE Germany
DJ Djibouti
DK Denmark
DM Dominica
DO Dominican Republic
DZ Algeria
EC Ecuador
EE Estonia
EG Egypt
EH Western Sahara
ER Eritrea
ES Spain
ET Ethiopia
FI Finland
FJ Fiji
FK Falkland Islands
FM Micronesia
FO Faroe Islands
FR France
GA Gabon
GB Britain (UK)
GD Grenada
GE Georgia
GF French Guiana
GG Guernsey
GH Ghana
GI Gibraltar
GL Greenland
GM Gambia
GN Guinea
GP Guadeloupe
GQ Equatorial Guinea
GR Greece
GS South Georgia & the South Sandwich Islands
GT Guatemala
GU Guam
GW Guinea-Bissau
GY Guyana
HK Hong Kong
HM Heard Island & McDonald Islands
HN Honduras
HR Croatia
HT Haiti
HU Hungary
ID Indonesia
IE Ireland
IL Israel
IM Isle of Man
IN India
IO British Indian Ocean Territory
IQ Iraq
IR Iran
IS Iceland
IT Italy
JE Jersey
JM Jamaica
JO Jordan
JP Japan
KE Kenya
KG Kyrgyzstan
KH Cambodia
KI Kiribati
KM Comoros
KN St Kitts & Nevis
KP Korea (North)
KR Korea (South)
KW Kuwait
KY Cayman Islands
KZ Kazakhstan
LA Laos
LB Lebanon
LC St Lucia
LI Liechtenstein
LK Sri Lanka
LR Liberia
LS Lesotho
LT Lithuania
LU Luxembourg
LV Latvia
LY Libya
MA Morocco
MC Monaco
MD Moldova
ME Montenegro
MG Madagascar
MH Marshall Islands
MK Macedonia
ML Mali
MM Myanmar (Burma)
MN Mongolia
MO Macau
MP Northern Mariana Islands
MQ Martinique
MR Mauritania
MS Montserrat
MT Malta
MU Mauritius
MV Maldives
MW Malawi
MX Mexico
MY Malaysia
MZ Mozambique
NA Namibia
NC New Caledonia
NE Niger
NF Norfolk Island
NG Nigeria
NI Nicaragua
NL Netherlands
NO Norway
NP Nepal
NR Nauru
NU Niue
NZ New Zealand
OM Oman
PA Panama
PE Peru
PF French Polynesia
PG Papua New Guinea
PH Philippines
PK Pakistan
PL Poland
PM St Pierre & Miquelon
PN Pitcairn
PR Puerto Rico
PS Palestine
PT Portugal
PW Palau
PY Paraguay
QA Qatar
RE Reunion
RO Romania
RS Serbia
RU Russia
RW Rwanda
SA Saudi Arabia
SB Solomon Islands
SC Seychelles
SD Sudan
SE Sweden
SG Singapore
SH St Helena
SI Slovenia
SJ Svalbard & Jan Mayen
SK Slovakia
SL Sierra Leone
SM San Marino
SN Senegal
SO Somalia
SR Suriname
ST Sao Tome & Principe
SV El Salvador
SY Syria
SZ Swaziland
TC Turks & Caicos Is
TD Chad
TF French Southern & Antarctic Lands
TG Togo
TH Thailand
TJ Tajikistan
TK Tokelau
TL East Timor
TM Turkmenistan
TN Tunisia
TO Tonga
TR Turkey
TT Trinidad & Tobago
TV Tuvalu
TW Taiwan
TZ Tanzania
UA Ukraine
UG Uganda
UM US minor outlying islands
US United States
UY Uruguay
UZ Uzbekistan
VA Vatican City
VC St Vincent
VE Venezuela
VG Virgin Islands (UK)
VI Virgin Islands (US)
VN Vietnam
VU Vanuatu
WF Wallis & Futuna
WS Samoa (western)
YE Yemen
YT Mayotte
ZA South Africa
ZM Zambia
ZW Zimbabwe

BIN
commands/zoneinfo/itca.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View file

@ -0,0 +1,82 @@
# @(#)leapseconds 8.3
# Allowance for leapseconds added to each timezone file.
# The International Earth Rotation Service periodically uses leap seconds
# to keep UTC to within 0.9 s of UT1
# (which measures the true angular orientation of the earth in space); see
# Terry J Quinn, The BIPM and the accurate measure of time,
# Proc IEEE 79, 7 (July 1991), 894-905.
# There were no leap seconds before 1972, because the official mechanism
# accounting for the discrepancy between atomic time and the earth's rotation
# did not exist until the early 1970s.
# 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 UTC
# 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 1992 Jun 30 23:59:60 + S
Leap 1993 Jun 30 23:59:60 + S
Leap 1994 Jun 30 23:59:60 + S
Leap 1995 Dec 31 23:59:60 + S
Leap 1997 Jun 30 23:59:60 + S
Leap 1998 Dec 31 23:59:60 + S
Leap 2005 Dec 31 23:59:60 + S
# ...
# Sent: Thursday, February 01, 2007 9:49 AM
# ...
# Subject: Bulletin C number 33
#
# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
#
# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
#
# SERVICE DE LA ROTATION TERRESTRE
# OBSERVATOIRE DE PARIS
# 61, Av. de l'Observatoire 75014 PARIS (France)
# ...
#
# Paris, 1 February 2007
# Bulletin C 33
# To authorities responsible
# for the measurement and
# distribution of time
#
# INFORMATION ON UTC - TAI
#
# NO positive leap second will be introduced at the end of June 2007.
# The difference between Coordinated Universal Time UTC and the
# International Atomic Time TAI is:
# from 2006 January 1, 0h UTC, until further notice : UTC-TAI = -33 s
# Leap seconds can be introduced in UTC at the end of the months of
# December or June, depending on the evolution of UT1-TAI. Bulletin C is
# mailed every six months, either to announce a time step in UTC, or to
# confirm that there will be no time step at the next possible date.
#
# Daniel GAMBIS
# Director
# Earth Orientation Center of IERS
# Observatoire de Paris, France

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,71 @@
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)logwtmp.c 7.7";
/* As received from UCB, with include reordering and OLD_TIME condition. */
#endif /* !defined NOID */
#endif /* !defined lint */
/*
* Copyright (c) 1988 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANT[A]BILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef lint
#ifdef LIBC_SCCS
static char sccsid[] = "@(#)logwtmp.c 5.2 (Berkeley) 9/20/88";
#endif /* defined LIBC_SCCS */
#endif /* !defined lint */
#include <sys/types.h>
#include <utmp.h>
#ifdef OLD_TIME
char dummy_to_keep_linker_happy;
#endif /* defined OLD_TIME */
#ifndef OLD_TIME
#include <sys/file.h>
#include <sys/time.h>
#include <sys/stat.h>
#define WTMPFILE "/usr/adm/wtmp"
logwtmp(line, name, host)
char *line, *name, *host;
{
struct utmp ut;
struct stat buf;
int fd;
time_t time();
char *strncpy();
if ((fd = open(WTMPFILE, O_WRONLY|O_APPEND, 0)) < 0)
return;
if (!fstat(fd, &buf)) {
(void)strncpy(ut.ut_line, line, sizeof(ut.ut_line));
(void)strncpy(ut.ut_name, name, sizeof(ut.ut_name));
(void)strncpy(ut.ut_host, host, sizeof(ut.ut_host));
(void)time(&ut.ut_time);
if (write(fd, (char *)&ut, sizeof(struct utmp)) !=
sizeof(struct utmp))
(void)ftruncate(fd, buf.st_size);
}
(void)close(fd);
}
#endif /* !defined OLD_TIME */

View file

@ -0,0 +1,237 @@
.TH NEWCTIME 3
.SH NAME
asctime, ctime, difftime, gmtime, localtime, mktime \- convert date and time to ASCII
.SH SYNOPSIS
.nf
.B extern char *tzname[2];
.PP
.B void tzset()
.PP
.B #include <sys/types.h>
.PP
.B char *ctime(clock)
.B const time_t *clock;
.PP
.B double difftime(time1, time0)
.B time_t time1;
.B time_t time0;
.PP
.B #include <time.h>
.PP
.B char *asctime(tm)
.B const struct tm *tm;
.PP
.B struct tm *localtime(clock)
.B const time_t *clock;
.PP
.B struct tm *gmtime(clock)
.B const time_t *clock;
.PP
.B time_t mktime(tm)
.B struct tm *tm;
.PP
.B cc ... -ltz
.fi
.SH DESCRIPTION
.I Ctime\^
converts a long integer, pointed to by
.IR clock ,
representing the time in seconds since
00:00:00 UTC, 1970-01-01,
and returns a pointer to a
string of the form
.br
.ce
.eo
Thu Nov 24 18:22:48 1986\n\0
.br
.ec
Years requiring fewer than four characters are padded with leading zeroes.
For years longer than four characters, the string is of the form
.br
.ce
.eo
Thu Nov 24 18:22:48 81986\n\0
.ec
.br
with five spaces before the year.
These unusual formats are designed to make it less likely that older
software that expects exactly 26 bytes of output will mistakenly output
misleading values for out-of-range years.
.PP
.I Localtime\^
and
.I gmtime\^
return pointers to ``tm'' structures, described below.
.I Localtime\^
corrects for the time zone and any time zone adjustments
(such as Daylight Saving Time in the United States).
After filling in the ``tm'' structure,
.I localtime
sets the
.BR tm_isdst 'th
element of
.B tzname
to a pointer to an
ASCII string that's the time zone abbreviation to be used with
.IR localtime 's
return value.
.PP
.I Gmtime\^
converts to Coordinated Universal Time.
.PP
.I Asctime\^
converts a time value contained in a
``tm'' structure to a string,
as shown in the above example,
and returns a pointer to the string.
.PP
.I Mktime\^
converts the broken-down time,
expressed as local time,
in the structure pointed to by
.I tm
into a calendar time value with the same encoding as that of the values
returned by the
.I time
function.
The original values of the
.B tm_wday
and
.B tm_yday
components of the structure are ignored,
and the original values of the other components are not restricted
to their normal ranges.
(A positive or zero value for
.B tm_isdst
causes
.I mktime
to presume initially that summer time (for example, Daylight Saving Time
in the U.S.A.)
respectively,
is or is not in effect for the specified time.
A negative value for
.B tm_isdst
causes the
.I mktime
function to attempt to divine whether summer time is in effect
for the specified time.)
On successful completion, the values of the
.B tm_wday
and
.B tm_yday
components of the structure are set appropriately,
and the other components are set to represent the specified calendar time,
but with their values forced to their normal ranges; the final value of
.B tm_mday
is not set until
.B tm_mon
and
.B tm_year
are determined.
.I Mktime\^
returns the specified calendar time;
If the calendar time cannot be represented,
it returns
.BR -1 .
.PP
.I Difftime\^
returns the difference between two calendar times,
.RI ( time1
-
.IR time0 ),
expressed in seconds.
.PP
Declarations of all the functions and externals, and the ``tm'' structure,
are in the
.B <time.h>\^
header file.
The structure (of type)
.B struct tm
includes the following fields:
.RS
.PP
.nf
.ta .5i +\w'long tm_gmtoff;\0\0'u
int tm_sec; /\(** seconds (0 - 60) \(**/
int tm_min; /\(** minutes (0 - 59) \(**/
int tm_hour; /\(** hours (0 - 23) \(**/
int tm_mday; /\(** day of month (1 - 31) \(**/
int tm_mon; /\(** month of year (0 - 11) \(**/
int tm_year; /\(** year \- 1900 \(**/
int tm_wday; /\(** day of week (Sunday = 0) \(**/
int tm_yday; /\(** day of year (0 - 365) \(**/
int tm_isdst; /\(** is summer time in effect? \(**/
char \(**tm_zone; /\(** abbreviation of timezone name \(**/
long tm_gmtoff; /\(** offset from UTC in seconds \(**/
.fi
.RE
.PP
The
.I tm_zone
and
.I tm_gmtoff
fields exist, and are filled in, only if arrangements to do
so were made when the library containing these functions was
created.
There is no guarantee that these fields will continue to exist
in this form in future releases of this code.
.PP
.I Tm_isdst\^
is non-zero if summer time is in effect.
.PP
.I Tm_gmtoff
is the offset (in seconds) of the time represented
from UTC, with positive values indicating east
of the Prime Meridian.
.SH FILES
.ta \w'/usr/local/etc/zoneinfo/posixrules\0\0'u
/usr/local/etc/zoneinfo time zone information directory
.br
/usr/local/etc/zoneinfo/localtime local time zone file
.br
/usr/local/etc/zoneinfo/posixrules used with POSIX-style TZ's
.br
/usr/local/etc/zoneinfo/GMT for UTC leap seconds
.sp
If
.B /usr/local/etc/zoneinfo/GMT
is absent,
UTC leap seconds are loaded from
.BR /usr/local/etc/zoneinfo/posixrules .
.SH SEE ALSO
getenv(3),
newstrftime(3),
newtzset(3),
time(2),
tzfile(5)
.SH NOTES
The return values point to static data;
the data is overwritten by each call.
The
.B tm_zone
field of a returned
.B "struct tm"
points to a static array of characters, which
will also be overwritten at the next call
(and by calls to
.IR tzset ).
.PP
.I Asctime\^
and
.I ctime\^
behave strangely for years before 1000 or after 9999.
The 1989 and 1999 editions of the C Standard say
that years from \-99 through 999 are converted without
extra spaces, but this conflicts with longstanding
tradition and with this implementation.
Traditional implementations of these two functions are
restricted to years in the range 1900 through 2099.
To avoid this portability mess, new programs should use
.I strftime\^
instead.
.PP
Avoid using out-of-range values with
.I mktime
when setting up lunch with promptness sticklers in Riyadh.
.\" @(#)newctime.3 7.17

View file

@ -0,0 +1,147 @@
NAME
asctime, ctime, difftime, gmtime, localtime, mktime -
convert date and time to ASCII
SYNOPSIS
extern char *tzname[2];
void tzset()
#include <sys/types.h>
char *ctime(clock)
const time_t *clock;
double difftime(time1, time0)
time_t time1;
time_t time0;
#include <time.h>
char *asctime(tm)
const struct tm *tm;
struct tm *localtime(clock)
const time_t *clock;
struct tm *gmtime(clock)
const time_t *clock;
time_t mktime(tm)
struct tm *tm;
cc ... -ltz
DESCRIPTION
Ctime converts a long integer, pointed to by clock,
representing the time in seconds since 00:00:00 UTC, 1970-
01-01, and returns a pointer to a string of the form
Thu Nov 24 18:22:48 1986\n\0
Years requiring fewer than four characters are padded with
leading zeroes. For years longer than four characters, the
string is of the form
Thu Nov 24 18:22:48 81986\n\0
with five spaces before the year. These unusual formats are
designed to make it less likely that older software that
expects exactly 26 bytes of output will mistakenly output
misleading values for out-of-range years.
Localtime and gmtime return pointers to ``tm'' structures,
described below. Localtime corrects for the time zone and
any time zone adjustments (such as Daylight Saving Time in
the United States). After filling in the ``tm'' structure,
localtime sets the tm_isdst'th element of tzname to a
pointer to an ASCII string that's the time zone abbreviation
to be used with localtime's return value.
Gmtime converts to Coordinated Universal Time.
Asctime converts a time value contained in a ``tm''
structure to a string, as shown in the above example, and
returns a pointer to the string.
Mktime converts the broken-down time, expressed as local
time, in the structure pointed to by tm into a calendar time
value with the same encoding as that of the values returned
by the time function. The original values of the tm_wday
and tm_yday components of the structure are ignored, and the
original values of the other components are not restricted
to their normal ranges. (A positive or zero value for
tm_isdst causes mktime to presume initially that summer time
(for example, Daylight Saving Time in the U.S.A.)
respectively, is or is not in effect for the specified time.
A negative value for tm_isdst causes the mktime function to
attempt to divine whether summer time is in effect for the
specified time.) On successful completion, the values of
the tm_wday and tm_yday components of the structure are set
appropriately, and the other components are set to represent
the specified calendar time, but with their values forced to
their normal ranges; the final value of tm_mday is not set
until tm_mon and tm_year are determined. Mktime returns the
specified calendar time; If the calendar time cannot be
represented, it returns -1.
Difftime returns the difference between two calendar times,
(time1 - time0), expressed in seconds.
Declarations of all the functions and externals, and the
``tm'' structure, are in the <time.h> header file. The
structure (of type) struct tm includes the following fields:
int tm_sec; /* seconds (0 - 60) */
int tm_min; /* minutes (0 - 59) */
int tm_hour; /* hours (0 - 23) */
int tm_mday; /* day of month (1 - 31) */
int tm_mon; /* month of year (0 - 11) */
int tm_year; /* year - 1900 */
int tm_wday; /* day of week (Sunday = 0) */
int tm_yday; /* day of year (0 - 365) */
int tm_isdst; /* is summer time in effect? */
char *tm_zone; /* abbreviation of timezone name */
long tm_gmtoff; /* offset from UTC in seconds */
The tm_zone and tm_gmtoff fields exist, and are filled in,
only if arrangements to do so were made when the library
containing these functions was created. There is no
guarantee that these fields will continue to exist in this
form in future releases of this code.
Tm_isdst is non-zero if summer time is in effect.
Tm_gmtoff is the offset (in seconds) of the time represented
from UTC, with positive values indicating east of the Prime
Meridian.
FILES
/usr/local/etc/zoneinfo time zone information
directory
/usr/local/etc/zoneinfo/localtime local time zone file
/usr/local/etc/zoneinfo/posixrules used with POSIX-style
TZ's
/usr/local/etc/zoneinfo/GMT for UTC leap seconds
If /usr/local/etc/zoneinfo/GMT is absent, UTC leap seconds
are loaded from /usr/local/etc/zoneinfo/posixrules.
SEE ALSO
getenv(3), newstrftime(3), newtzset(3), time(2), tzfile(5)
NOTES
The return values point to static data; the data is
overwritten by each call. The tm_zone field of a returned
struct tm points to a static array of characters, which will
also be overwritten at the next call (and by calls to
tzset).
Asctime and ctime behave strangely for years before 1000 or
after 9999. The 1989 and 1999 editions of the C Standard
say that years from -99 through 999 are converted without
extra spaces, but this conflicts with longstanding tradition
and with this implementation. Traditional implementations
of these two functions are restricted to years in the range
1900 through 2099. To avoid this portability mess, new
programs should use strftime instead.
Avoid using out-of-range values with mktime when setting up
lunch with promptness sticklers in Riyadh.

View file

@ -0,0 +1,230 @@
.\" Based on the UCB file whose copyright information appears below.
.\" Copyright (c) 1989, 1991 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to Berkeley by
.\" the American National Standards Committee X3, on Information
.\" Processing Systems.
.\"
.\" 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.
.\"
.\" from: @(#)strftime.3 5.12 (Berkeley) 6/29/91
.\" $Id: strftime.3,v 1.4 1993/12/15 20:33:00 jtc Exp $
.\"
.TH NEWSTRFTIME 3
.SH NAME
strftime \- format date and time
.SH SYNOPSIS
.nf
.B #include <sys/types.h>
.B #include <time.h>
.PP
.B size_t strftime(buf, maxsize, format, timeptr)
.B char *buf;
.B size_t maxsize;
.B const char *format;
.B const struct tm *timeptr
.PP
.B cc ... -ltz
.fi
.SH DESCRIPTION
The
.I strftime\^
function formats the information from
.I timeptr\^
into the buffer
.I buf\^
according to the string pointed to by
.IR format\^ .
.PP
The
.I format\^
string consists of zero or more conversion specifications and
ordinary characters.
All ordinary characters are copied directly into the buffer.
A conversion specification consists of a percent sign
.Ql %
and one other character.
.PP
No more than
.I maxsize\^
characters are be placed into the array.
If the total number of resulting characters, including the terminating
null character, is not more than
.IR maxsize\^ ,
.I strftime\^
returns the number of characters in the array, not counting the
terminating null.
Otherwise, zero is returned.
.PP
Each conversion specification is replaced by the characters as
follows which are then copied into the buffer.
.TP
%A
is replaced by the locale's full weekday name.
.TP
%a
is replaced by the locale's abbreviated weekday name.
.TP
%B
is replaced by the locale's full month name.
.TP
%b or %h
is replaced by the locale's abbreviated month name.
.TP
%C
is replaced by the century (a year divided by 100 and truncated to an integer)
as a decimal number (00-99).
.TP
%c
is replaced by the locale's appropriate date and time representation.
.TP
%D
is replaced by the date in the format %m/%d/%y.
.TP
%d
is replaced by the day of the month as a decimal number (01-31).
.TP
%e
is replaced by the day of month as a decimal number (1-31);
single digits are preceded by a blank.
.TP
%F
is replaced by the date in the format %Y-%m-%d.
.TP
%G
is replaced by the ISO 8601 year with century as a decimal number.
.TP
%g
is replaced by the ISO 8601 year without century as a decimal number (00-99).
.TP
%H
is replaced by the hour (24-hour clock) as a decimal number (00-23).
.TP
%I
is replaced by the hour (12-hour clock) as a decimal number (01-12).
.TP
%j
is replaced by the day of the year as a decimal number (001-366).
.TP
%k
is replaced by the hour (24-hour clock) as a decimal number (0-23);
single digits are preceded by a blank.
.TP
%l
is replaced by the hour (12-hour clock) as a decimal number (1-12);
single digits are preceded by a blank.
.TP
%M
is replaced by the minute as a decimal number (00-59).
.TP
%m
is replaced by the month as a decimal number (01-12).
.TP
%n
is replaced by a newline.
.TP
%p
is replaced by the locale's equivalent of either AM or PM.
.TP
%R
is replaced by the time in the format %H:%M.
.TP
%r
is replaced by the locale's representation of 12-hour clock time
using AM/PM notation.
.TP
%S
is replaced by the second as a decimal number (00-60).
.TP
%s
is replaced by the number of seconds since the Epoch, UTC (see mktime(3)).
.TP
%T
is replaced by the time in the format %H:%M:%S.
.TP
%t
is replaced by a tab.
.TP
%U
is replaced by the week number of the year (Sunday as the first day of
the week) as a decimal number (00-53).
.TP
%u
is replaced by the weekday (Monday as the first day of the week)
as a decimal number (1-7).
.TP
%V
is replaced by the week number of the year (Monday as the first day of
the week) as a decimal number (01-53). If the week containing January
1 has four or more days in the new year, then it is week 1; otherwise
it is week 53 of the previous year, and the next week is week 1.
.TP
%W
is replaced by the week number of the year (Monday as the first day of
the week) as a decimal number (00-53).
.TP
%w
is replaced by the weekday (Sunday as the first day of the week)
as a decimal number (0-6).
.TP
%X
is replaced by the locale's appropriate time representation.
.TP
%x
is replaced by the locale's appropriate date representation.
.TP
%Y
is replaced by the year with century as a decimal number.
.TP
%y
is replaced by the year without century as a decimal number (00-99).
.TP
%Z
is replaced by the time zone name,
or by the empty string if this is not determinable.
.TP
%z
is replaced by the offset from UTC in the format +HHMM or -HHMM as appropriate,
with positive values representing locations east of Greenwich,
or by the empty string if this is not determinable.
.TP
%%
is replaced by a single %.
.TP
%+
is replaced by the date and time in date(1) format.
.SH SEE ALSO
date(1),
getenv(3),
newctime(3),
newtzset(3),
time(2),
tzfile(5)
.\" @(#)newstrftime.3 7.15

View file

@ -0,0 +1,152 @@
NAME
strftime - format date and time
SYNOPSIS
#include <sys/types.h>
#include <time.h>
size_t strftime(buf, maxsize, format, timeptr)
char *buf;
size_t maxsize;
const char *format;
const struct tm *timeptr
cc ... -ltz
DESCRIPTION
The strftime function formats the information from timeptr
into the buffer buf according to the string pointed to by
format.
The format string consists of zero or more conversion
specifications and ordinary characters. All ordinary
characters are copied directly into the buffer. A
conversion specification consists of a percent sign and one
other character.
No more than maxsize characters are be placed into the
array. If the total number of resulting characters,
including the terminating null character, is not more than
maxsize, strftime returns the number of characters in the
array, not counting the terminating null. Otherwise, zero
is returned.
Each conversion specification is replaced by the characters
as follows which are then copied into the buffer.
%A is replaced by the locale's full weekday name.
%a is replaced by the locale's abbreviated weekday name.
%B is replaced by the locale's full month name.
%b or %h
is replaced by the locale's abbreviated month name.
%C is replaced by the century (a year divided by 100 and
truncated to an integer) as a decimal number (00-99).
%c is replaced by the locale's appropriate date and time
representation.
%D is replaced by the date in the format %m/%d/%y.
%d is replaced by the day of the month as a decimal number
(01-31).
%e is replaced by the day of month as a decimal number
(1-31); single digits are preceded by a blank.
%F is replaced by the date in the format %Y-%m-%d.
%G is replaced by the ISO 8601 year with century as a
decimal number.
%g is replaced by the ISO 8601 year without century as a
decimal number (00-99).
%H is replaced by the hour (24-hour clock) as a decimal
number (00-23).
%I is replaced by the hour (12-hour clock) as a decimal
number (01-12).
%j is replaced by the day of the year as a decimal number
(001-366).
%k is replaced by the hour (24-hour clock) as a decimal
number (0-23); single digits are preceded by a blank.
%l is replaced by the hour (12-hour clock) as a decimal
number (1-12); single digits are preceded by a blank.
%M is replaced by the minute as a decimal number (00-59).
%m is replaced by the month as a decimal number (01-12).
%n is replaced by a newline.
%p is replaced by the locale's equivalent of either AM or
PM.
%R is replaced by the time in the format %H:%M.
%r is replaced by the locale's representation of 12-hour
clock time using AM/PM notation.
%S is replaced by the second as a decimal number (00-60).
%s is replaced by the number of seconds since the Epoch,
UTC (see mktime(3)).
%T is replaced by the time in the format %H:%M:%S.
%t is replaced by a tab.
%U is replaced by the week number of the year (Sunday as
the first day of the week) as a decimal number (00-53).
%u is replaced by the weekday (Monday as the first day of
the week) as a decimal number (1-7).
%V is replaced by the week number of the year (Monday as
the first day of the week) as a decimal number (01-53).
If the week containing January 1 has four or more days
in the new year, then it is week 1; otherwise it is
week 53 of the previous year, and the next week is week
1.
%W is replaced by the week number of the year (Monday as
the first day of the week) as a decimal number (00-53).
%w is replaced by the weekday (Sunday as the first day of
the week) as a decimal number (0-6).
%X is replaced by the locale's appropriate time
representation.
%x is replaced by the locale's appropriate date
representation.
%Y is replaced by the year with century as a decimal
number.
%y is replaced by the year without century as a decimal
number (00-99).
%Z is replaced by the time zone name, or by the empty
string if this is not determinable.
%z is replaced by the offset from UTC in the format +HHMM
or -HHMM as appropriate, with positive values
representing locations east of Greenwich, or by the
empty string if this is not determinable.
%% is replaced by a single %.
%+ is replaced by the date and time in date(1) format.
SEE ALSO
date(1), getenv(3), newctime(3), newtzset(3), time(2),
tzfile(5)

View file

@ -0,0 +1,237 @@
.TH NEWTZSET 3
.SH NAME
tzset \- initialize time conversion information
.SH SYNOPSIS
.nf
.B void tzset()
.PP
.B cc ... -ltz
.fi
.SH DESCRIPTION
.I Tzset
uses the value of the environment variable
.B TZ
to set time conversion information used by
.IR localtime .
If
.B TZ
does not appear in the environment,
the best available approximation to local wall clock time, as specified
by the
.IR tzfile (5)-format
file
.B localtime
in the system time conversion information directory, is used by
.IR localtime .
If
.B TZ
appears in the environment but its value is a null string,
Coordinated Universal Time (UTC) is used (without leap second
correction). If
.B TZ
appears in the environment and its value is not a null string:
.IP
if the value begins with a colon, it is used as a pathname of a file
from which to read the time conversion information;
.IP
if the value does not begin with a colon, it is first used as the
pathname of a file from which to read the time conversion information,
and, if that file cannot be read, is used directly as a specification of
the time conversion information.
.PP
When
.B TZ
is used as a pathname, if it begins with a slash,
it is used as an absolute pathname; otherwise,
it is used as a pathname relative to a system time conversion information
directory.
The file must be in the format specified in
.IR tzfile (5).
.PP
When
.B TZ
is used directly as a specification of the time conversion information,
it must have the following syntax (spaces inserted for clarity):
.IP
\fIstd\|offset\fR[\fIdst\fR[\fIoffset\fR][\fB,\fIrule\fR]]
.PP
Where:
.RS
.TP 15
.IR std " and " dst
Three or more bytes that are the designation for the standard
.RI ( std )
or summer
.RI ( dst )
time zone. Only
.I std
is required; if
.I dst
is missing, then summer time does not apply in this locale.
Upper- and lowercase letters are explicitly allowed. Any characters
except a leading colon
.RB ( : ),
digits, comma
.RB ( , ),
minus
.RB ( \(mi ),
plus
.RB ( \(pl ),
and ASCII NUL are allowed.
.TP
.I offset
Indicates the value one must add to the local time to arrive at
Coordinated Universal Time. The
.I offset
has the form:
.RS
.IP
\fIhh\fR[\fB:\fImm\fR[\fB:\fIss\fR]]
.RE
.IP
The minutes
.RI ( mm )
and seconds
.RI ( ss )
are optional. The hour
.RI ( hh )
is required and may be a single digit. The
.I offset
following
.I std
is required. If no
.I offset
follows
.IR dst ,
summer time is assumed to be one hour ahead of standard time. One or
more digits may be used; the value is always interpreted as a decimal
number. The hour must be between zero and 24, and the minutes (and
seconds) \(em if present \(em between zero and 59. If preceded by a
.RB `` \(mi '',
the time zone shall be east of the Prime Meridian; otherwise it shall be
west (which may be indicated by an optional preceding
.RB `` \(pl '').
.TP
.I rule
Indicates when to change to and back from summer time. The
.I rule
has the form:
.RS
.IP
\fIdate\fB/\fItime\fB,\fIdate\fB/\fItime\fR
.RE
.IP
where the first
.I date
describes when the change from standard to summer time occurs and the
second
.I date
describes when the change back happens. Each
.I time
field describes when, in current local time, the change to the other
time is made.
.IP
The format of
.I date
is one of the following:
.RS
.TP 10
.BI J n
The Julian day
.I n
.RI "(1\ \(<=" "\ n\ " "\(<=\ 365).
Leap days are not counted; that is, in all years \(em including leap
years \(em February 28 is day 59 and March 1 is day 60. It is
impossible to explicitly refer to the occasional February 29.
.TP
.I n
The zero-based Julian day
.RI "(0\ \(<=" "\ n\ " "\(<=\ 365).
Leap days are counted, and it is possible to refer to February 29.
.TP
.BI M m . n . d
The
.IR d' th
day
.RI "(0\ \(<=" "\ d\ " "\(<=\ 6)
of week
.I n
of month
.I m
of the year
.RI "(1\ \(<=" "\ n\ " "\(<=\ 5,
.RI "1\ \(<=" "\ m\ " "\(<=\ 12,
where week 5 means ``the last
.I d
day in month
.IR m ''
which may occur in either the fourth or the fifth week). Week 1 is the
first week in which the
.IR d' th
day occurs. Day zero is Sunday.
.RE
.IP "" 15
The
.I time
has the same format as
.I offset
except that no leading sign
.RB (`` \(mi ''
or
.RB `` \(pl '')
is allowed. The default, if
.I time
is not given, is
.BR 02:00:00 .
.RE
.LP
If no
.I rule
is present in
.BR TZ ,
the rules specified
by the
.IR tzfile (5)-format
file
.B posixrules
in the system time conversion information directory are used, with the
standard and summer time offsets from UTC replaced by those specified by
the
.I offset
values in
.BR TZ .
.PP
For compatibility with System V Release 3.1, a semicolon
.RB ( ; )
may be used to separate the
.I rule
from the rest of the specification.
.PP
If the
.B TZ
environment variable does not specify a
.IR tzfile (5)-format
and cannot be interpreted as a direct specification,
UTC is used.
.SH FILES
.ta \w'/usr/local/etc/zoneinfo/posixrules\0\0'u
/usr/local/etc/zoneinfo time zone information directory
.br
/usr/local/etc/zoneinfo/localtime local time zone file
.br
/usr/local/etc/zoneinfo/posixrules used with POSIX-style TZ's
.br
/usr/local/etc/zoneinfo/GMT for UTC leap seconds
.sp
If
.B /usr/local/etc/zoneinfo/GMT
is absent,
UTC leap seconds are loaded from
.BR /usr/local/etc/zoneinfo/posixrules .
.SH SEE ALSO
getenv(3),
newctime(3),
newstrftime(3),
time(2),
tzfile(5)
.\" @(#)newtzset.3 7.5

View file

@ -0,0 +1,153 @@
NAME
tzset - initialize time conversion information
SYNOPSIS
void tzset()
cc ... -ltz
DESCRIPTION
Tzset uses the value of the environment variable TZ to set
time conversion information used by localtime. If TZ does
not appear in the environment, the best available
approximation to local wall clock time, as specified by the
tzfile(5)-format file localtime in the system time
conversion information directory, is used by localtime. If
TZ appears in the environment but its value is a null
string, Coordinated Universal Time (UTC) is used (without
leap second correction). If TZ appears in the environment
and its value is not a null string:
if the value begins with a colon, it is used as a
pathname of a file from which to read the time
conversion information;
if the value does not begin with a colon, it is first
used as the pathname of a file from which to read the
time conversion information, and, if that file cannot
be read, is used directly as a specification of the
time conversion information.
When TZ is used as a pathname, if it begins with a slash, it
is used as an absolute pathname; otherwise, it is used as a
pathname relative to a system time conversion information
directory. The file must be in the format specified in
tzfile(5).
When TZ is used directly as a specification of the time
conversion information, it must have the following syntax
(spaces inserted for clarity):
stdoffset[dst[offset][,rule]]
Where:
std and dst Three or more bytes that are the
designation for the standard (std) or
summer (dst) time zone. Only std is
required; if dst is missing, then summer
time does not apply in this locale.
Upper- and lowercase letters are
explicitly allowed. Any characters
except a leading colon (:), digits,
comma (,), minus (-), plus (+), and
ASCII NUL are allowed.
offset Indicates the value one must add to the
local time to arrive at Coordinated
Universal Time. The offset has the
form:
hh[:mm[:ss]]
The minutes (mm) and seconds (ss) are
optional. The hour (hh) is required and
may be a single digit. The offset
following std is required. If no offset
follows dst, summer time is assumed to
be one hour ahead of standard time. One
or more digits may be used; the value is
always interpreted as a decimal number.
The hour must be between zero and 24,
and the minutes (and seconds) - if
present - between zero and 59. If
preceded by a ``-'', the time zone shall
be east of the Prime Meridian; otherwise
it shall be west (which may be indicated
by an optional preceding ``+'').
rule Indicates when to change to and back
from summer time. The rule has the
form:
date/time,date/time
where the first date describes when the
change from standard to summer time
occurs and the second date describes
when the change back happens. Each time
field describes when, in current local
time, the change to the other time is
made.
The format of date is one of the
following:
Jn The Julian day n
(1 < n < 365). Leap days are
not counted; that is, in all
years - including leap years -
February 28 is day 59 and
March 1 is day 60. It is
impossible to explicitly refer
to the occasional February 29.
n The zero-based Julian day
(0 < n < 365). Leap days are
counted, and it is possible to
refer to February 29.
Mm.n.d The d'th day (0 < d < 6) of
week n of month m of the year
(1 < n < 5, 1 < m < 12, where
week 5 means ``the last d day
in month m'' which may occur
in either the fourth or the
fifth week). Week 1 is the
first week in which the d'th
day occurs. Day zero is
Sunday.
The time has the same format as offset
except that no leading sign (``-'' or
``+'') is allowed. The default, if time
is not given, is 02:00:00.
If no rule is present in TZ, the rules specified by the
tzfile(5)-format file posixrules in the system time
conversion information directory are used, with the standard
and summer time offsets from UTC replaced by those specified
by the offset values in TZ.
For compatibility with System V Release 3.1, a semicolon (;)
may be used to separate the rule from the rest of the
specification.
If the TZ environment variable does not specify a
tzfile(5)-format and cannot be interpreted as a direct
specification, UTC is used.
FILES
/usr/local/etc/zoneinfo time zone information
directory
/usr/local/etc/zoneinfo/localtime local time zone file
/usr/local/etc/zoneinfo/posixrules used with POSIX-style
TZ's
/usr/local/etc/zoneinfo/GMT for UTC leap seconds
If /usr/local/etc/zoneinfo/GMT is absent, UTC leap seconds
are loaded from /usr/local/etc/zoneinfo/posixrules.
SEE ALSO
getenv(3), newctime(3), newstrftime(3), time(2), tzfile(5)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,26 @@
# @(#)pacificnew 8.1
# From Arthur David Olson (1989-04-05):
# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill
# establishing "Pacific Presidential Election Time"; it was not acted on
# by the Senate or signed into law by the President.
# You might want to change the "PE" (Presidential Election) below to
# "Q" (Quadrennial) to maintain three-character zone abbreviations.
# If you're really conservative, you might want to change it to "D".
# Avoid "L" (Leap Year), which won't be true in 2100.
# If Presidential Election Time is ever established, replace "XXXX" below
# with the year the law takes effect and uncomment the "##" lines.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
## Rule Twilite XXXX max - Apr Sun>=1 2:00 1:00 D
## Rule Twilite XXXX max uspres Oct lastSun 2:00 1:00 PE
## Rule Twilite XXXX max uspres Nov Sun>=7 2:00 0 S
## Rule Twilite XXXX max nonpres Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
## Zone America/Los_Angeles-PET -8:00 US P%sT XXXX
## -8:00 Twilite P%sT
# For now...
Link America/Los_Angeles US/Pacific-New ##

316
commands/zoneinfo/private.h Normal file
View file

@ -0,0 +1,316 @@
#ifndef PRIVATE_H
#define PRIVATE_H
/*
** This file is in the public domain, so clarified as of
** 1996-06-05 by Arthur David Olson.
*/
/*
** This header is for use ONLY with the time conversion code.
** There is no guarantee that it will remain unchanged,
** or that it will remain at all.
** Do NOT copy it to any system include directory.
** Thank you!
*/
/*
** ID
*/
#ifndef lint
#ifndef NOID
static char privatehid[] = "@(#)private.h 7.55";
#endif /* !defined NOID */
#endif /* !defined lint */
#define GRANDPARENTED "Local time zone must be set--see zic manual page"
/*
** Defaults for preprocessor symbols.
** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'.
*/
#ifndef HAVE_ADJTIME
#define HAVE_ADJTIME 1
#endif /* !defined HAVE_ADJTIME */
#ifndef HAVE_GETTEXT
#define HAVE_GETTEXT 0
#endif /* !defined HAVE_GETTEXT */
#ifndef HAVE_INCOMPATIBLE_CTIME_R
#define HAVE_INCOMPATIBLE_CTIME_R 0
#endif /* !defined INCOMPATIBLE_CTIME_R */
#ifndef HAVE_SETTIMEOFDAY
#define HAVE_SETTIMEOFDAY 3
#endif /* !defined HAVE_SETTIMEOFDAY */
#ifndef HAVE_STRERROR
#define HAVE_STRERROR 1
#endif /* !defined HAVE_STRERROR */
#ifndef HAVE_SYMLINK
#define HAVE_SYMLINK 1
#endif /* !defined HAVE_SYMLINK */
#ifndef HAVE_SYS_STAT_H
#define HAVE_SYS_STAT_H 1
#endif /* !defined HAVE_SYS_STAT_H */
#ifndef HAVE_SYS_WAIT_H
#define HAVE_SYS_WAIT_H 1
#endif /* !defined HAVE_SYS_WAIT_H */
#ifndef HAVE_UNISTD_H
#define HAVE_UNISTD_H 1
#endif /* !defined HAVE_UNISTD_H */
#ifndef HAVE_UTMPX_H
#define HAVE_UTMPX_H 0
#endif /* !defined HAVE_UTMPX_H */
#ifndef LOCALE_HOME
#define LOCALE_HOME "/usr/lib/locale"
#endif /* !defined LOCALE_HOME */
#if HAVE_INCOMPATIBLE_CTIME_R
#define asctime_r _incompatible_asctime_r
#define ctime_r _incompatible_ctime_r
#endif /* HAVE_INCOMPATIBLE_CTIME_R */
/*
** Nested includes
*/
#include "sys/types.h" /* for time_t */
#include "stdio.h"
#include "errno.h"
#include "string.h"
#include "limits.h" /* for CHAR_BIT */
#include "time.h"
#include "stdlib.h"
#if HAVE_GETTEXT
#include "libintl.h"
#endif /* HAVE_GETTEXT */
#if HAVE_SYS_WAIT_H
#include <sys/wait.h> /* for WIFEXITED and WEXITSTATUS */
#endif /* HAVE_SYS_WAIT_H */
#ifndef WIFEXITED
#define WIFEXITED(status) (((status) & 0xff) == 0)
#endif /* !defined WIFEXITED */
#ifndef WEXITSTATUS
#define WEXITSTATUS(status) (((status) >> 8) & 0xff)
#endif /* !defined WEXITSTATUS */
#if HAVE_UNISTD_H
#include "unistd.h" /* for F_OK and R_OK */
#endif /* HAVE_UNISTD_H */
#if !HAVE_UNISTD_H
#ifndef F_OK
#define F_OK 0
#endif /* !defined F_OK */
#ifndef R_OK
#define R_OK 4
#endif /* !defined R_OK */
#endif /* !HAVE_UNISTD_H */
/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
#define is_digit(c) ((unsigned)(c) - '0' <= 9)
/*
** Workarounds for compilers/systems.
*/
/*
** SunOS 4.1.1 cc lacks prototypes.
*/
#ifndef P
#if __STDC__
#define P(x) x
#else /* !__STDC__ */
#define P(x) ()
#endif /* !__STDC__ */
#endif /* !defined P */
/*
** SunOS 4.1.1 headers lack EXIT_SUCCESS.
*/
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif /* !defined EXIT_SUCCESS */
/*
** SunOS 4.1.1 headers lack EXIT_FAILURE.
*/
#ifndef EXIT_FAILURE
#define EXIT_FAILURE 1
#endif /* !defined EXIT_FAILURE */
/*
** SunOS 4.1.1 headers lack FILENAME_MAX.
*/
#ifndef FILENAME_MAX
#ifndef MAXPATHLEN
#ifdef unix
#include "sys/param.h"
#endif /* defined unix */
#endif /* !defined MAXPATHLEN */
#ifdef MAXPATHLEN
#define FILENAME_MAX MAXPATHLEN
#endif /* defined MAXPATHLEN */
#ifndef MAXPATHLEN
#define FILENAME_MAX 1024 /* Pure guesswork */
#endif /* !defined MAXPATHLEN */
#endif /* !defined FILENAME_MAX */
/*
** SunOS 4.1.1 libraries lack remove.
*/
#ifndef remove
extern int unlink P((const char * filename));
#define remove unlink
#endif /* !defined remove */
/*
** Some ancient errno.h implementations don't declare errno.
** But some newer errno.h implementations define it as a macro.
** Fix the former without affecting the latter.
*/
#ifndef errno
extern int errno;
#endif /* !defined errno */
/*
** Some time.h implementations don't declare asctime_r.
** Others might define it as a macro.
** Fix the former without affecting the latter.
*/
#ifndef asctime_r
extern char * asctime_r();
#endif
/*
** Private function declarations.
*/
char * icalloc P((int nelem, int elsize));
char * icatalloc P((char * old, const char * new));
char * icpyalloc P((const char * string));
char * imalloc P((int n));
void * irealloc P((void * pointer, int size));
void icfree P((char * pointer));
void ifree P((char * pointer));
const char *scheck P((const char *string, const char *format));
/*
** Finally, some convenience items.
*/
#ifndef TRUE
#define TRUE 1
#endif /* !defined TRUE */
#ifndef FALSE
#define FALSE 0
#endif /* !defined FALSE */
#ifndef TYPE_BIT
#define TYPE_BIT(type) (sizeof (type) * CHAR_BIT)
#endif /* !defined TYPE_BIT */
#ifndef TYPE_SIGNED
#define TYPE_SIGNED(type) (((type) -1) < 0)
#endif /* !defined TYPE_SIGNED */
/*
** Since the definition of TYPE_INTEGRAL contains floating point numbers,
** it cannot be used in preprocessor directives.
*/
#ifndef TYPE_INTEGRAL
#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5)
#endif /* !defined TYPE_INTEGRAL */
#ifndef INT_STRLEN_MAXIMUM
/*
** 302 / 1000 is log10(2.0) rounded up.
** Subtract one for the sign bit if the type is signed;
** add one for integer division truncation;
** add one more for a minus sign if the type is signed.
*/
#define INT_STRLEN_MAXIMUM(type) \
((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \
1 + TYPE_SIGNED(type))
#endif /* !defined INT_STRLEN_MAXIMUM */
/*
** INITIALIZE(x)
*/
#ifndef GNUC_or_lint
#ifdef lint
#define GNUC_or_lint
#endif /* defined lint */
#ifndef lint
#ifdef __GNUC__
#define GNUC_or_lint
#endif /* defined __GNUC__ */
#endif /* !defined lint */
#endif /* !defined GNUC_or_lint */
#ifndef INITIALIZE
#ifdef GNUC_or_lint
#define INITIALIZE(x) ((x) = 0)
#endif /* defined GNUC_or_lint */
#ifndef GNUC_or_lint
#define INITIALIZE(x)
#endif /* !defined GNUC_or_lint */
#endif /* !defined INITIALIZE */
/*
** For the benefit of GNU folk...
** `_(MSGID)' uses the current locale's message library string for MSGID.
** The default is to use gettext if available, and use MSGID otherwise.
*/
#ifndef _
#if HAVE_GETTEXT
#define _(msgid) gettext(msgid)
#else /* !HAVE_GETTEXT */
#define _(msgid) msgid
#endif /* !HAVE_GETTEXT */
#endif /* !defined _ */
#ifndef TZ_DOMAIN
#define TZ_DOMAIN "tz"
#endif /* !defined TZ_DOMAIN */
#if HAVE_INCOMPATIBLE_CTIME_R
#undef asctime_r
#undef ctime_r
char *asctime_r P((struct tm const *, char *));
char *ctime_r P((time_t const *, char *));
#endif /* HAVE_INCOMPATIBLE_CTIME_R */
/*
** UNIX was a registered trademark of The Open Group in 2003.
*/
#endif /* !defined PRIVATE_H */

View file

@ -0,0 +1,64 @@
#
/*LINTLIBRARY*/
#include "stdio.h"
#ifndef lint
#ifndef NOID
static char sccsid[] = "@(#)scheck.c 7.15";
#endif /* !NOID */
#endif /* !lint */
#include "ctype.h"
extern char * imalloc();
char *
scheck(string, format)
char * string;
char * format;
{
register char * fbuf;
register char * fp;
register char * tp;
register int c;
register char * result;
char dummy;
result = "";
if (string == NULL || format == NULL)
return result;
fbuf = imalloc(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(string, fbuf, &dummy) != 1)
result = format;
free(fbuf);
return result;
}

388
commands/zoneinfo/solar87 Normal file
View file

@ -0,0 +1,388 @@
# @(#)solar87 8.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 Asia/Riyadh87 3:07:04 - zzz 1987
3:07:04 sol87 zzz 1988
3:07:04 - zzz
# For backward compatibility...
Link Asia/Riyadh87 Mideast/Riyadh87

388
commands/zoneinfo/solar88 Normal file
View file

@ -0,0 +1,388 @@
# @(#)solar88 8.1
# 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 Asia/Riyadh88 3:07:04 - zzz 1988
3:07:04 sol88 zzz 1989
3:07:04 - zzz
# For backward compatibility...
Link Asia/Riyadh88 Mideast/Riyadh88

393
commands/zoneinfo/solar89 Normal file
View file

@ -0,0 +1,393 @@
# @(#)solar89 8.1
# 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 Asia/Riyadh89 3:07:04 - zzz 1989
3:07:04 sol89 zzz 1990
3:07:04 - zzz
# For backward compatibility...
Link Asia/Riyadh89 Mideast/Riyadh89

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,761 @@
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)strftime.c 7.75";
/*
** Based on the UCB version with the ID appearing below.
** This is ANSIish only when "multibyte character == plain character".
*/
#endif /* !defined NOID */
#endif /* !defined lint */
#include "private.h"
/*
** Copyright (c) 1989 The Regents of the University of California.
** All rights reserved.
**
** Redistribution and use in source and binary forms are permitted
** provided that the above copyright notice and this paragraph are
** duplicated in all such forms and that any documentation,
** advertising materials, and other materials related to such
** distribution and use acknowledge that the software was developed
** by the University of California, Berkeley. The name of the
** University may not be used to endorse or promote products derived
** from this software without specific prior written permission.
** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef LIBC_SCCS
#ifndef lint
static const char sccsid[] = "@(#)strftime.c 5.4 (Berkeley) 3/14/89";
#endif /* !defined lint */
#endif /* !defined LIBC_SCCS */
#include "tzfile.h"
#include "fcntl.h"
#include "locale.h"
struct lc_time_T {
const char * mon[MONSPERYEAR];
const char * month[MONSPERYEAR];
const char * wday[DAYSPERWEEK];
const char * weekday[DAYSPERWEEK];
const char * X_fmt;
const char * x_fmt;
const char * c_fmt;
const char * am;
const char * pm;
const char * date_fmt;
};
#ifdef LOCALE_HOME
#include "sys/stat.h"
static struct lc_time_T localebuf;
static struct lc_time_T * _loc P((void));
#define Locale _loc()
#endif /* defined LOCALE_HOME */
#ifndef LOCALE_HOME
#define Locale (&C_time_locale)
#endif /* !defined LOCALE_HOME */
static const struct lc_time_T C_time_locale = {
{
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
}, {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
}, {
"Sun", "Mon", "Tue", "Wed",
"Thu", "Fri", "Sat"
}, {
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
},
/* X_fmt */
"%H:%M:%S",
/*
** x_fmt
** C99 requires this format.
** Using just numbers (as here) makes Quakers happier;
** it's also compatible with SVR4.
*/
"%m/%d/%y",
/*
** c_fmt
** C99 requires this format.
** Previously this code used "%D %X", but we now conform to C99.
** Note that
** "%a %b %d %H:%M:%S %Y"
** is used by Solaris 2.3.
*/
"%a %b %e %T %Y",
/* am */
"AM",
/* pm */
"PM",
/* date_fmt */
"%a %b %e %H:%M:%S %Z %Y"
};
static char * _add P((const char *, char *, const char *));
static char * _conv P((int, const char *, char *, const char *));
static char * _fmt P((const char *, const struct tm *, char *, const char *,
int *));
static char * _yconv P((int, int, int, int, char *, const char *));
extern char * tzname[];
#ifndef YEAR_2000_NAME
#define YEAR_2000_NAME "CHECK_STRFTIME_FORMATS_FOR_TWO_DIGIT_YEARS"
#endif /* !defined YEAR_2000_NAME */
#define IN_NONE 0
#define IN_SOME 1
#define IN_THIS 2
#define IN_ALL 3
size_t
strftime(s, maxsize, format, t)
char * const s;
const size_t maxsize;
const char * const format;
const struct tm * const t;
{
char * p;
int warn;
tzset();
#ifdef LOCALE_HOME
localebuf.mon[0] = 0;
#endif /* defined LOCALE_HOME */
warn = IN_NONE;
p = _fmt(((format == NULL) ? "%c" : format), t, s, s + maxsize, &warn);
#ifndef NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU
if (warn != IN_NONE && getenv(YEAR_2000_NAME) != NULL) {
(void) fprintf(stderr, "\n");
if (format == NULL)
(void) fprintf(stderr, "NULL strftime format ");
else (void) fprintf(stderr, "strftime format \"%s\" ",
format);
(void) fprintf(stderr, "yields only two digits of years in ");
if (warn == IN_SOME)
(void) fprintf(stderr, "some locales");
else if (warn == IN_THIS)
(void) fprintf(stderr, "the current locale");
else (void) fprintf(stderr, "all locales");
(void) fprintf(stderr, "\n");
}
#endif /* !defined NO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU */
if (p == s + maxsize)
return 0;
*p = '\0';
return p - s;
}
static char *
_fmt(format, t, pt, ptlim, warnp)
const char * format;
const struct tm * const t;
char * pt;
const char * const ptlim;
int * warnp;
{
for ( ; *format; ++format) {
if (*format == '%') {
label:
switch (*++format) {
case '\0':
--format;
break;
case 'A':
pt = _add((t->tm_wday < 0 ||
t->tm_wday >= DAYSPERWEEK) ?
"?" : Locale->weekday[t->tm_wday],
pt, ptlim);
continue;
case 'a':
pt = _add((t->tm_wday < 0 ||
t->tm_wday >= DAYSPERWEEK) ?
"?" : Locale->wday[t->tm_wday],
pt, ptlim);
continue;
case 'B':
pt = _add((t->tm_mon < 0 ||
t->tm_mon >= MONSPERYEAR) ?
"?" : Locale->month[t->tm_mon],
pt, ptlim);
continue;
case 'b':
case 'h':
pt = _add((t->tm_mon < 0 ||
t->tm_mon >= MONSPERYEAR) ?
"?" : Locale->mon[t->tm_mon],
pt, ptlim);
continue;
case 'C':
/*
** %C used to do a...
** _fmt("%a %b %e %X %Y", t);
** ...whereas now POSIX 1003.2 calls for
** something completely different.
** (ado, 1993-05-24)
*/
pt = _yconv(t->tm_year, TM_YEAR_BASE, 1, 0,
pt, ptlim);
continue;
case 'c':
{
int warn2 = IN_SOME;
pt = _fmt(Locale->c_fmt, t, pt, ptlim, warnp);
if (warn2 == IN_ALL)
warn2 = IN_THIS;
if (warn2 > *warnp)
*warnp = warn2;
}
continue;
case 'D':
pt = _fmt("%m/%d/%y", t, pt, ptlim, warnp);
continue;
case 'd':
pt = _conv(t->tm_mday, "%02d", pt, ptlim);
continue;
case 'E':
case 'O':
/*
** C99 locale modifiers.
** The sequences
** %Ec %EC %Ex %EX %Ey %EY
** %Od %oe %OH %OI %Om %OM
** %OS %Ou %OU %OV %Ow %OW %Oy
** are supposed to provide alternate
** representations.
*/
goto label;
case 'e':
pt = _conv(t->tm_mday, "%2d", pt, ptlim);
continue;
case 'F':
pt = _fmt("%Y-%m-%d", t, pt, ptlim, warnp);
continue;
case 'H':
pt = _conv(t->tm_hour, "%02d", pt, ptlim);
continue;
case 'I':
pt = _conv((t->tm_hour % 12) ?
(t->tm_hour % 12) : 12,
"%02d", pt, ptlim);
continue;
case 'j':
pt = _conv(t->tm_yday + 1, "%03d", pt, ptlim);
continue;
case 'k':
/*
** This used to be...
** _conv(t->tm_hour % 12 ?
** t->tm_hour % 12 : 12, 2, ' ');
** ...and has been changed to the below to
** match SunOS 4.1.1 and Arnold Robbins'
** strftime version 3.0. That is, "%k" and
** "%l" have been swapped.
** (ado, 1993-05-24)
*/
pt = _conv(t->tm_hour, "%2d", pt, ptlim);
continue;
#ifdef KITCHEN_SINK
case 'K':
/*
** After all this time, still unclaimed!
*/
pt = _add("kitchen sink", pt, ptlim);
continue;
#endif /* defined KITCHEN_SINK */
case 'l':
/*
** This used to be...
** _conv(t->tm_hour, 2, ' ');
** ...and has been changed to the below to
** match SunOS 4.1.1 and Arnold Robbin's
** strftime version 3.0. That is, "%k" and
** "%l" have been swapped.
** (ado, 1993-05-24)
*/
pt = _conv((t->tm_hour % 12) ?
(t->tm_hour % 12) : 12,
"%2d", pt, ptlim);
continue;
case 'M':
pt = _conv(t->tm_min, "%02d", pt, ptlim);
continue;
case 'm':
pt = _conv(t->tm_mon + 1, "%02d", pt, ptlim);
continue;
case 'n':
pt = _add("\n", pt, ptlim);
continue;
case 'p':
pt = _add((t->tm_hour >= (HOURSPERDAY / 2)) ?
Locale->pm :
Locale->am,
pt, ptlim);
continue;
case 'R':
pt = _fmt("%H:%M", t, pt, ptlim, warnp);
continue;
case 'r':
pt = _fmt("%I:%M:%S %p", t, pt, ptlim, warnp);
continue;
case 'S':
pt = _conv(t->tm_sec, "%02d", pt, ptlim);
continue;
case 's':
{
struct tm tm;
char buf[INT_STRLEN_MAXIMUM(
time_t) + 1];
time_t mkt;
tm = *t;
mkt = mktime(&tm);
if (TYPE_SIGNED(time_t))
(void) sprintf(buf, "%ld",
(long) mkt);
else (void) sprintf(buf, "%lu",
(unsigned long) mkt);
pt = _add(buf, pt, ptlim);
}
continue;
case 'T':
pt = _fmt("%H:%M:%S", t, pt, ptlim, warnp);
continue;
case 't':
pt = _add("\t", pt, ptlim);
continue;
case 'U':
pt = _conv((t->tm_yday + DAYSPERWEEK -
t->tm_wday) / DAYSPERWEEK,
"%02d", pt, ptlim);
continue;
case 'u':
/*
** From Arnold Robbins' strftime version 3.0:
** "ISO 8601: Weekday as a decimal number
** [1 (Monday) - 7]"
** (ado, 1993-05-24)
*/
pt = _conv((t->tm_wday == 0) ?
DAYSPERWEEK : t->tm_wday,
"%d", pt, ptlim);
continue;
case 'V': /* ISO 8601 week number */
case 'G': /* ISO 8601 year (four digits) */
case 'g': /* ISO 8601 year (two digits) */
/*
** From Arnold Robbins' strftime version 3.0: "the week number of the
** year (the first Monday as the first day of week 1) as a decimal number
** (01-53)."
** (ado, 1993-05-24)
**
** From "http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html" by Markus Kuhn:
** "Week 01 of a year is per definition the first week which has the
** Thursday in this year, which is equivalent to the week which contains
** the fourth day of January. In other words, the first week of a new year
** is the week which has the majority of its days in the new year. Week 01
** might also contain days from the previous year and the week before week
** 01 of a year is the last week (52 or 53) of the previous year even if
** it contains days from the new year. A week starts with Monday (day 1)
** and ends with Sunday (day 7). For example, the first week of the year
** 1997 lasts from 1996-12-30 to 1997-01-05..."
** (ado, 1996-01-02)
*/
{
int year;
int base;
int yday;
int wday;
int w;
year = t->tm_year;
base = TM_YEAR_BASE;
yday = t->tm_yday;
wday = t->tm_wday;
for ( ; ; ) {
int len;
int bot;
int top;
len = isleap_sum(year, base) ?
DAYSPERLYEAR :
DAYSPERNYEAR;
/*
** What yday (-3 ... 3) does
** the ISO year begin on?
*/
bot = ((yday + 11 - wday) %
DAYSPERWEEK) - 3;
/*
** What yday does the NEXT
** ISO year begin on?
*/
top = bot -
(len % DAYSPERWEEK);
if (top < -3)
top += DAYSPERWEEK;
top += len;
if (yday >= top) {
++base;
w = 1;
break;
}
if (yday >= bot) {
w = 1 + ((yday - bot) /
DAYSPERWEEK);
break;
}
--base;
yday += isleap_sum(year, base) ?
DAYSPERLYEAR :
DAYSPERNYEAR;
}
#ifdef XPG4_1994_04_09
if ((w == 52 &&
t->tm_mon == TM_JANUARY) ||
(w == 1 &&
t->tm_mon == TM_DECEMBER))
w = 53;
#endif /* defined XPG4_1994_04_09 */
if (*format == 'V')
pt = _conv(w, "%02d",
pt, ptlim);
else if (*format == 'g') {
*warnp = IN_ALL;
pt = _yconv(year, base, 0, 1,
pt, ptlim);
} else pt = _yconv(year, base, 1, 1,
pt, ptlim);
}
continue;
case 'v':
/*
** From Arnold Robbins' strftime version 3.0:
** "date as dd-bbb-YYYY"
** (ado, 1993-05-24)
*/
pt = _fmt("%e-%b-%Y", t, pt, ptlim, warnp);
continue;
case 'W':
pt = _conv((t->tm_yday + DAYSPERWEEK -
(t->tm_wday ?
(t->tm_wday - 1) :
(DAYSPERWEEK - 1))) / DAYSPERWEEK,
"%02d", pt, ptlim);
continue;
case 'w':
pt = _conv(t->tm_wday, "%d", pt, ptlim);
continue;
case 'X':
pt = _fmt(Locale->X_fmt, t, pt, ptlim, warnp);
continue;
case 'x':
{
int warn2 = IN_SOME;
pt = _fmt(Locale->x_fmt, t, pt, ptlim, &warn2);
if (warn2 == IN_ALL)
warn2 = IN_THIS;
if (warn2 > *warnp)
*warnp = warn2;
}
continue;
case 'y':
*warnp = IN_ALL;
pt = _yconv(t->tm_year, TM_YEAR_BASE, 0, 1,
pt, ptlim);
continue;
case 'Y':
pt = _yconv(t->tm_year, TM_YEAR_BASE, 1, 1,
pt, ptlim);
continue;
case 'Z':
#ifdef TM_ZONE
if (t->TM_ZONE != NULL)
pt = _add(t->TM_ZONE, pt, ptlim);
else
#endif /* defined TM_ZONE */
if (t->tm_isdst >= 0)
pt = _add(tzname[t->tm_isdst != 0],
pt, ptlim);
/*
** C99 says that %Z must be replaced by the
** empty string if the time zone is not
** determinable.
*/
continue;
case 'z':
{
int diff;
char const * sign;
if (t->tm_isdst < 0)
continue;
#ifdef TM_GMTOFF
diff = t->TM_GMTOFF;
#else /* !defined TM_GMTOFF */
/*
** C99 says that the UTC offset must
** be computed by looking only at
** tm_isdst. This requirement is
** incorrect, since it means the code
** must rely on magic (in this case
** altzone and timezone), and the
** magic might not have the correct
** offset. Doing things correctly is
** tricky and requires disobeying C99;
** see GNU C strftime for details.
** For now, punt and conform to the
** standard, even though it's incorrect.
**
** C99 says that %z must be replaced by the
** empty string if the time zone is not
** determinable, so output nothing if the
** appropriate variables are not available.
*/
if (t->tm_isdst == 0)
#ifdef USG_COMPAT
diff = -timezone;
#else /* !defined USG_COMPAT */
continue;
#endif /* !defined USG_COMPAT */
else
#ifdef ALTZONE
diff = -altzone;
#else /* !defined ALTZONE */
continue;
#endif /* !defined ALTZONE */
#endif /* !defined TM_GMTOFF */
if (diff < 0) {
sign = "-";
diff = -diff;
} else sign = "+";
pt = _add(sign, pt, ptlim);
diff /= SECSPERMIN;
diff = (diff / MINSPERHOUR) * 100 +
(diff % MINSPERHOUR);
pt = _conv(diff, "%04d", pt, ptlim);
}
continue;
case '+':
pt = _fmt(Locale->date_fmt, t, pt, ptlim,
warnp);
continue;
case '%':
/*
** X311J/88-090 (4.12.3.5): if conversion char is
** undefined, behavior is undefined. Print out the
** character itself as printf(3) also does.
*/
default:
break;
}
}
if (pt == ptlim)
break;
*pt++ = *format;
}
return pt;
}
static char *
_conv(n, format, pt, ptlim)
const int n;
const char * const format;
char * const pt;
const char * const ptlim;
{
char buf[INT_STRLEN_MAXIMUM(int) + 1];
(void) sprintf(buf, format, n);
return _add(buf, pt, ptlim);
}
static char *
_add(str, pt, ptlim)
const char * str;
char * pt;
const char * const ptlim;
{
while (pt < ptlim && (*pt = *str++) != '\0')
++pt;
return pt;
}
/*
** POSIX and the C Standard are unclear or inconsistent about
** what %C and %y do if the year is negative or exceeds 9999.
** Use the convention that %C concatenated with %y yields the
** same output as %Y, and that %Y contains at least 4 bytes,
** with more only if necessary.
*/
static char *
_yconv(a, b, convert_top, convert_yy, pt, ptlim)
const int a;
const int b;
const int convert_top;
const int convert_yy;
char * pt;
const char * const ptlim;
{
register int lead;
register int trail;
#define DIVISOR 100
trail = a % DIVISOR + b % DIVISOR;
lead = a / DIVISOR + b / DIVISOR + trail / DIVISOR;
trail %= DIVISOR;
if (trail < 0 && lead > 0) {
trail += DIVISOR;
--lead;
} else if (lead < 0 && trail > 0) {
trail -= DIVISOR;
++lead;
}
if (convert_top) {
if (lead == 0 && trail < 0)
pt = _add("-0", pt, ptlim);
else pt = _conv(lead, "%02d", pt, ptlim);
}
if (convert_yy)
pt = _conv(((trail < 0) ? -trail : trail), "%02d", pt, ptlim);
return pt;
}
#ifdef LOCALE_HOME
static struct lc_time_T *
_loc P((void))
{
static const char locale_home[] = LOCALE_HOME;
static const char lc_time[] = "LC_TIME";
static char * locale_buf;
int fd;
int oldsun; /* "...ain't got nothin' to do..." */
char * lbuf;
char * name;
char * p;
const char ** ap;
const char * plim;
char filename[FILENAME_MAX];
struct stat st;
size_t namesize;
size_t bufsize;
/*
** Use localebuf.mon[0] to signal whether locale is already set up.
*/
if (localebuf.mon[0])
return &localebuf;
name = setlocale(LC_TIME, (char *) NULL);
if (name == NULL || *name == '\0')
goto no_locale;
/*
** If the locale name is the same as our cache, use the cache.
*/
lbuf = locale_buf;
if (lbuf != NULL && strcmp(name, lbuf) == 0) {
p = lbuf;
for (ap = (const char **) &localebuf;
ap < (const char **) (&localebuf + 1);
++ap)
*ap = p += strlen(p) + 1;
return &localebuf;
}
/*
** Slurp the locale file into the cache.
*/
namesize = strlen(name) + 1;
if (sizeof filename <
((sizeof locale_home) + namesize + (sizeof lc_time)))
goto no_locale;
oldsun = 0;
(void) sprintf(filename, "%s/%s/%s", locale_home, name, lc_time);
fd = open(filename, O_RDONLY);
if (fd < 0) {
/*
** Old Sun systems have a different naming and data convention.
*/
oldsun = 1;
(void) sprintf(filename, "%s/%s/%s", locale_home,
lc_time, name);
fd = open(filename, O_RDONLY);
if (fd < 0)
goto no_locale;
}
if (fstat(fd, &st) != 0)
goto bad_locale;
if (st.st_size <= 0)
goto bad_locale;
bufsize = namesize + st.st_size;
locale_buf = NULL;
lbuf = (lbuf == NULL) ? malloc(bufsize) : realloc(lbuf, bufsize);
if (lbuf == NULL)
goto bad_locale;
(void) strcpy(lbuf, name);
p = lbuf + namesize;
plim = p + st.st_size;
if (read(fd, p, (size_t) st.st_size) != st.st_size)
goto bad_lbuf;
if (close(fd) != 0)
goto bad_lbuf;
/*
** Parse the locale file into localebuf.
*/
if (plim[-1] != '\n')
goto bad_lbuf;
for (ap = (const char **) &localebuf;
ap < (const char **) (&localebuf + 1);
++ap) {
if (p == plim)
goto bad_lbuf;
*ap = p;
while (*p != '\n')
++p;
*p++ = '\0';
}
if (oldsun) {
/*
** SunOS 4 used an obsolescent format; see localdtconv(3).
** c_fmt had the ``short format for dates and times together''
** (SunOS 4 date, "%a %b %e %T %Z %Y" in the C locale);
** date_fmt had the ``long format for dates''
** (SunOS 4 strftime %C, "%A, %B %e, %Y" in the C locale).
** Discard the latter in favor of the former.
*/
localebuf.date_fmt = localebuf.c_fmt;
}
/*
** Record the successful parse in the cache.
*/
locale_buf = lbuf;
return &localebuf;
bad_lbuf:
free(lbuf);
bad_locale:
(void) close(fd);
no_locale:
localebuf = C_time_locale;
locale_buf = NULL;
return &localebuf;
}
#endif /* defined LOCALE_HOME */

36
commands/zoneinfo/systemv Normal file
View file

@ -0,0 +1,36 @@
# @(#)systemv 8.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 changes in the DST rules in the US after 1976 (which occurred after
# the old rules were written).
#
# If you need the old rules, uncomment ## lines.
# Compile this *without* leap second correction for true conformance.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
Rule SystemV min 1973 - Oct lastSun 2:00 0 S
Rule SystemV 1974 only - Jan 6 2:00 1:00 D
Rule SystemV 1974 only - Nov lastSun 2:00 0 S
Rule SystemV 1975 only - Feb 23 2:00 1:00 D
Rule SystemV 1975 only - Oct lastSun 2:00 0 S
Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
Rule SystemV 1976 max - Oct lastSun 2:00 0 S
# 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

View file

@ -0,0 +1,121 @@
.TH TIME2POSIX 3
.SH NAME
time2posix, posix2time \- convert seconds since the Epoch
.SH SYNOPSIS
.nf
.B #include <sys/types.h>
.B #include <time.h>
.PP
.B time_t time2posix(t)
.B time_t t
.PP
.B time_t posix2time(t)
.B time_t t
.PP
.B cc ... -ltz
.fi
.SH DESCRIPTION
IEEE Standard 1003.1
(POSIX)
legislates that a time_t value of
536457599 shall correspond to "Wed Dec 31 23:59:59 UTC 1986."
This effectively implies that POSIX time_t's cannot include leap
seconds and,
therefore,
that the system time must be adjusted as each leap occurs.
.PP
If the time package is configured with leap-second support
enabled,
however,
no such adjustment is needed and
time_t values continue to increase over leap events
(as a true `seconds since...' value).
This means that these values will differ from those required by POSIX
by the net number of leap seconds inserted since the Epoch.
.PP
Typically this is not a problem as the type time_t is intended
to be
(mostly)
opaque\(emtime_t values should only be obtained-from and
passed-to functions such as
.IR time(2) ,
.IR localtime(3) ,
.IR mktime(3) ,
and
.IR difftime(3) .
However,
POSIX gives an arithmetic
expression for directly computing a time_t value from a given date/time,
and the same relationship is assumed by some
(usually older)
applications.
Any programs creating/dissecting time_t's
using such a relationship will typically not handle intervals
over leap seconds correctly.
.PP
The
.I time2posix
and
.I posix2time
functions are provided to address this time_t mismatch by converting
between local time_t values and their POSIX equivalents.
This is done by accounting for the number of time-base changes that
would have taken place on a POSIX system as leap seconds were inserted
or deleted.
These converted values can then be used in lieu of correcting the older
applications,
or when communicating with POSIX-compliant systems.
.PP
.I Time2posix
is single-valued.
That is,
every local time_t
corresponds to a single POSIX time_t.
.I Posix2time
is less well-behaved:
for a positive leap second hit the result is not unique,
and for a negative leap second hit the corresponding
POSIX time_t doesn't exist so an adjacent value is returned.
Both of these are good indicators of the inferiority of the
POSIX representation.
.PP
The following table summarizes the relationship between a time
T and it's conversion to,
and back from,
the POSIX representation over the leap second inserted at the end of June,
1993.
.nf
.ta \w'93/06/30 'u +\w'23:59:59 'u +\w'A+0 'u +\w'X=time2posix(T) 'u
DATE TIME T X=time2posix(T) posix2time(X)
93/06/30 23:59:59 A+0 B+0 A+0
93/06/30 23:59:60 A+1 B+1 A+1 or A+2
93/07/01 00:00:00 A+2 B+1 A+1 or A+2
93/07/01 00:00:01 A+3 B+2 A+3
A leap second deletion would look like...
DATE TIME T X=time2posix(T) posix2time(X)
??/06/30 23:59:58 A+0 B+0 A+0
??/07/01 00:00:00 A+1 B+2 A+1
??/07/01 00:00:01 A+2 B+3 A+2
.sp
.ce
[Note: posix2time(B+1) => A+0 or A+1]
.fi
.PP
If leap-second support is not enabled,
local time_t's and
POSIX time_t's are equivalent,
and both
.I time2posix
and
.I posix2time
degenerate to the identity function.
.SH SEE ALSO
difftime(3),
localtime(3),
mktime(3),
time(2)
.\" @(#)time2posix.3 7.8
.\" This file is in the public domain, so clarified as of
.\" 1996-06-05 by Arthur David Olson.

View file

@ -0,0 +1,83 @@
NAME
time2posix, posix2time - convert seconds since the Epoch
SYNOPSIS
#include <sys/types.h>
#include <time.h>
time_t time2posix(t)
time_t t
time_t posix2time(t)
time_t t
cc ... -ltz
DESCRIPTION
IEEE Standard 1003.1 (POSIX) legislates that a time_t value
of 536457599 shall correspond to "Wed Dec 31 23:59:59 UTC
1986." This effectively implies that POSIX time_t's cannot
include leap seconds and, therefore, that the system time
must be adjusted as each leap occurs.
If the time package is configured with leap-second support
enabled, however, no such adjustment is needed and time_t
values continue to increase over leap events (as a true
`seconds since...' value). This means that these values
will differ from those required by POSIX by the net number
of leap seconds inserted since the Epoch.
Typically this is not a problem as the type time_t is
intended to be (mostly) opaque-time_t values should only be
obtained-from and passed-to functions such as time(2),
localtime(3), mktime(3), and difftime(3). However, POSIX
gives an arithmetic expression for directly computing a
time_t value from a given date/time, and the same
relationship is assumed by some (usually older)
applications. Any programs creating/dissecting time_t's
using such a relationship will typically not handle
intervals over leap seconds correctly.
The time2posix and posix2time functions are provided to
address this time_t mismatch by converting between local
time_t values and their POSIX equivalents. This is done by
accounting for the number of time-base changes that would
have taken place on a POSIX system as leap seconds were
inserted or deleted. These converted values can then be
used in lieu of correcting the older applications, or when
communicating with POSIX-compliant systems.
Time2posix is single-valued. That is, every local time_t
corresponds to a single POSIX time_t. Posix2time is less
well-behaved: for a positive leap second hit the result is
not unique, and for a negative leap second hit the
corresponding POSIX time_t doesn't exist so an adjacent
value is returned. Both of these are good indicators of the
inferiority of the POSIX representation.
The following table summarizes the relationship between a
time T and it's conversion to, and back from, the POSIX
representation over the leap second inserted at the end of
June, 1993.
DATE TIME T X=time2posix(T) posix2time(X)
93/06/30 23:59:59 A+0 B+0 A+0
93/06/30 23:59:60 A+1 B+1 A+1 or A+2
93/07/01 00:00:00 A+2 B+1 A+1 or A+2
93/07/01 00:00:01 A+3 B+2 A+3
A leap second deletion would look like...
DATE TIME T X=time2posix(T) posix2time(X)
??/06/30 23:59:58 A+0 B+0 A+0
??/07/01 00:00:00 A+1 B+2 A+1
??/07/01 00:00:01 A+2 B+3 A+2
[Note: posix2time(B+1) => A+0 or A+1]
If leap-second support is not enabled, local time_t's and
POSIX time_t's are equivalent, and both time2posix and
posix2time degenerate to the identity function.
SEE ALSO
difftime(3), localtime(3), mktime(3), time(2)

View file

@ -0,0 +1,278 @@
<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-type" content='text/html; charset="US-ASCII"' />
<title>Time and the Arts</title>
</head>
<body>
<h1>Time and the Arts</h1>
<address>
@(#)tz-art.htm 7.59
</address>
<p>
Please send corrections to this web page to the
<a href="mailto:tz@elsie.nci.nih.gov">time zone mailing list</a>.</p>
<p>
See also <a href="tz-link.htm">Sources for Time Zone and Daylight Saving Time Data</a>.</p>
<hr />
<p>
Data on recordings of "Save That Time," Russ Long, Serrob Publishing, BMI:</p>
<table>
<tr><td>Artist</td><td>Karrin Allyson</td></tr>
<tr><td>CD</td><td>I Didn't Know About You</td></tr>
<tr><td>Copyright Date</td><td>1993</td></tr>
<tr><td>Label</td><td>Concord Jazz, Inc.</td></tr>
<tr><td>ID</td><td>CCD-4543</td></tr>
<tr><td>Track Time</td><td>3:44</td></tr>
<tr><td>Personnel</td><td>Karrin Allyson, vocal;
Russ Long, piano;
Gerald Spaits, bass;
Todd Strait, drums</td></tr>
<tr><td>Notes</td><td>CD notes "additional lyric by Karrin Allyson;
arranged by Russ Long and Karrin Allyson"</td></tr>
<tr><td>ADO Rating</td><td>1 star</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=A1fdovw9ta92k">AMG Rating</a></td><td>4 stars</td></tr>
<tr><td>Penguin Rating</td><td>3.5 stars</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Kevin Mahogany</td></tr>
<tr><td>CD</td><td>Double Rainbow</td></tr>
<tr><td>Copyright Date</td><td>1993</td></tr>
<tr><td>Label</td><td>Enja Records</td></tr>
<tr><td>ID</td><td>ENJ-7097 2</td></tr>
<tr><td>Track Time</td><td>6:27</td></tr>
<tr><td>Personnel</td><td>Kevin Mahogany, vocal;
Kenny Barron, piano;
Ray Drummond, bass;
Ralph Moore, tenor saxophone;
Lewis Nash, drums</td></tr>
<tr><td>ADO Rating</td><td>1.5 stars</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=Akikbikzjbb19">AMG Rating</a></td><td>3 stars</td></tr>
<tr><td>Penguin Rating</td><td>3 stars</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Joe Williams</td></tr>
<tr><td>CD</td><td>Here's to Life</td></tr>
<tr><td>Copyright Date</td><td>1994</td></tr>
<tr><td>Label</td><td>Telarc International Corporation</td></tr>
<tr><td>ID</td><td>CD-83357</td></tr>
<tr><td>Track Time</td><td>3:58</td></tr>
<tr><td>Personnel</td><td>Joe Williams, vocal
The Robert Farnon [39 piece] Orchestra</td></tr>
<tr><td>Notes</td><td>This CD is also available as part of a 3-CD package from
Telarc, "Triple Play" (CD-83461)</td></tr>
<tr><td>ADO Rating</td><td>black dot</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=Amyyvad6kt8w1">AMG Rating</a></td><td>2 stars</td></tr>
<tr><td>Penguin Rating</td><td>3 stars</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Charles Fambrough</td></tr>
<tr><td>CD</td><td>Keeper of the Spirit</td></tr>
<tr><td>Copyright Date</td><td>1995</td></tr>
<tr><td>Label</td><td>AudioQuest Music</td></tr>
<tr><td>ID</td><td>AQ-CD1033</td></tr>
<tr><td>Track Time</td><td>7:07</td></tr>
<tr><td>Personnel</td><td>Charles Fambrough, bass;
Joel Levine, tenor recorder;
Edward Simon, piano;
Lenny White, drums;
Marion Simon, percussion</td></tr>
<tr><td>Notes</td><td>On-line information and samples available at
<a href="http://wwmusic.com/~music/audioq/rel/1033.html">http://wwmusic.com/~music/audioq/rel/1033.html</a></td></tr>
<tr><td>ADO Rating</td><td>2 stars</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=A5rkcikcjbb89">AMG Rating</a></td><td>unrated</td></tr>
<tr><td>Penguin Rating</td><td>3 stars</td></tr>
</table>
<hr />
<p>Also of note:</p>
<table>
<tr><td>Artist</td><td>Holly Cole Trio</td></tr>
<tr><td>CD</td><td>Blame It On My Youth</td></tr>
<tr><td>Copyright Date</td><td>1992</td></tr>
<tr><td>Label</td><td>Manhattan</td></tr>
<tr><td>ID</td><td>CDP 7 97349 2</td></tr>
<tr><td>Total Time</td><td>37:45</td></tr>
<tr><td>Personnel</td><td>Holly Cole, voice;
Aaron Davis, piano;
David Piltch, string bass</td></tr>
<tr><td>Notes</td><td>Lyrical reference to "Eastern Standard Time" in
Tom Waits' "Purple Avenue"</td></tr>
<tr><td>ADO Rating</td><td>2.5 stars</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=A3a9ds37ya3dg">AMG Rating</a></td><td>3 stars</td></tr>
<tr><td>Penguin Rating</td><td>unrated</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Milt Hinton</td></tr>
<tr><td>CD</td><td>Old Man Time</td></tr>
<tr><td>Copyright Date</td><td>1990</td></tr>
<tr><td>Label</td><td>Chiaroscuro</td></tr>
<tr><td>ID</td><td>CR(D) 310</td></tr>
<tr><td>Total Time</td><td>149:38 (two CDs)</td></tr>
<tr><td>Personnel</td><td>Milt Hinton, bass;
Doc Cheatham, Dizzy Gillespie, Clark Terry, trumpet;
Al Grey, trombone;
Eddie Barefield, Joe Camel (Flip Phillips), Buddy Tate,
clarinet and saxophone;
John Bunch, Red Richards, Norman Simmons, Derek Smith,
Ralph Sutton, piano;
Danny Barker, Al Casey, guitar;
Gus Johnson, Gerryck King, Bob Rosengarden, Jackie Williams,
drums;
Lionel Hampton, vibraphone;
Cab Calloway, Joe Williams, vocal;
Buck Clayton, arrangements</td></tr>
<tr><td>Notes</td><td>tunes include Old Man Time, Time After Time,
Sometimes I'm Happy,
A Hot Time in the Old Town Tonight,
Four or Five Times, Now's the Time,
Time on My Hands, This Time It's Us,
and Good Time Charlie
On-line samples available at
<a href="http://www.chiaroscurojazz.com/albuminfo.php4?albumid=49">http://www.chiaroscurojazz.com/albuminfo.php3?albumid=49</a></td></tr>
<tr><td>ADO Rating</td><td>3 stars</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=A1cbyxdab8ola">AMG Rating</a></td><td>4.5 stars</td></tr>
<tr><td>Penguin Rating</td><td>3 stars</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Alan Broadbent</td></tr>
<tr><td>CD</td><td>Pacific Standard Time</td></tr>
<tr><td>Copyright Date</td><td>1995</td></tr>
<tr><td>Label</td><td>Concord Jazz, Inc.</td></tr>
<tr><td>ID</td><td>CCD-4664</td></tr>
<tr><td>Total Time</td><td>62:42</td></tr>
<tr><td>Personnel</td><td>Alan Broadbent, piano;
Putter Smith, Bass;
Frank Gibson, Jr., drums</td></tr>
<tr><td>Notes</td><td>The CD cover features an analemma for equation-of-time fans</td></tr>
<tr><td>ADO Rating</td><td>1 star</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=Asl8zefuk8gfo">AMG Rating</a></td><td>4 stars</td></tr>
<tr><td>Penguin Rating</td><td>3.5 stars</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Anthony Braxton/Richard Teitelbaum</td></tr>
<tr><td>CD</td><td>Silence/Time Zones</td></tr>
<tr><td>Copyright Date</td><td>1996</td></tr>
<tr><td>Label</td><td>Black Lion</td></tr>
<tr><td>ID</td><td>BLCD 760221</td></tr>
<tr><td>Total Time</td><td>72:58</td></tr>
<tr><td>Personnel</td><td>Anthony Braxton, sopranino and alto saxophones,
contrebasse clarinet, miscellaneous instruments;
Leo Smith, trumpet and miscellaneous instruments;
Leroy Jenkins, violin and miscellaneous instruments;
Richard Teitelbaum, modular moog and micromoog synthesizer</td></tr>
<tr><td>ADO Rating</td><td>black dot</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=A5bkvu3xjan1k">AMG Rating</a></td><td>unrated</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Jules Verne</td></tr>
<tr><td>Book</td><td>Le Tour du Monde en Quatre-Vingts Jours
(Around the World in Eighty Days)</td></tr>
<tr><td>Notes</td><td>Wall-clock time plays a central role in the plot.
European readers of the 1870s clearly held the U.S. press in
deep contempt; the protagonists cross the U.S. without once
reading a paper.
An on-line French-language version of the book
"with illustrations from the original 1873 French-language edition"
is available at
<a href="http://fourmilab.ch/etexts/www/tdm80j">http://fourmilab.ch/etexts/www/tdm80j</a>
An on-line English-language translation of the book is available at
<a href="http://www.literature.org/Works/Jules-Verne/eighty">http://www.literature.org/Works/Jules-Verne/eighty</a></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Film</td><td>Bell Science - About Time</td></tr>
<tr><td>Notes</td><td>The Frank Baxter/Richard Deacon extravaganza.
Information is available at
<a href="http://www.videoflicks.com/titles/1035/1035893.htm">http://www.videoflicks.com/titles/1035/1035893.htm</a></td></tr>
</table>
<hr />
<ul>
<li>
An episode of "The Adventures of Superman" entitled "The Mysterious
Cube," first aired 1958-02-24, had Superman convincing the controllers
of WWV to broadcast time signals five minutes ahead of actual time;
doing so got a crook trying to beat the statute of limitations to
emerge a bit too early from the titular enclosure.
</li>
<li>
The 1960s ITC television series "The Prisoner" included an episode
entitled "The Chimes of Big Ben" in which our protagonist tumbled to
the fraudulent nature of a Poland-to-England escape upon hearing "Big
Ben" chiming on Polish local time.
</li>
<li>
The series "Seinfeld" included an episode entitled "The Susie," first
broadcast 1997-02-13, in which Kramer decides that daylight saving time
isn't coming fast enough, so he sets his watch ahead an hour.
</li>
<li>
The syndicated comic strip "Dilbert" featured an all-too-rare example of
time zone humor on 1998-03-14.
</li>
<li>
Surrealist artist Guy Billout's work "Date Line" appeared on page 103
of the 1999-11 Atlantic Monthly.
</li>
<li>
"Gloom, Gloom, Go Away" by Walter Kirn appeared on page 106 of Time
Magazine's 2002-11-11 issue; among other things, it proposed
year-round DST as a way of lessening wintertime despair.
</li>
<li>
The "20 Hours in America" episode of "The West Wing," first aired 2002-09-25,
saw White House staffers stranded in Indiana; they thought they had time to
catch Air Force One but were done in by intra-Indiana local time changes.
</li>
<li>
"In what time zone would you find New York City?" was a $200 question on
the 1999-11-13 United States airing of "Who Wants to Be a Millionaire?"
"In 1883, what industry led the movement to divide the U.S. into four time
zones?" was a $32,000 question on the 2001-05-23 United States airing of
"Who Wants to Be a Millionaire?" At this rate, the million-dollar time-zone
question should have been asked 2002-06-04.
</li>
</ul>
<hr />
<ul>
<li>
"We're been using the five-cent nickle in this country since 1492.
Now that's pretty near 100 years, daylight savings [sic]."
(Groucho Marx as Captain Spaulding in "Animal Crackers", 1930,
as noted by Will Fitzerald)
</li>
<li>
"Good news."
"What did they do? Extend Daylight Saving Time year round?"
(Professional tanner George Hamilton, in dialog from a
May, 1999 episode of the syndicated television series "Baywatch")
</li>
<li>
"A fundamental belief held by Americans is that if you are on land, you
cannot be killed by a fish...So most Americans remain on land, believing
they're safe. Unfortunately, this belief&mdash;like so many myths, such as that
there's a reason for 'Daylight Saving Time'&mdash;is false."
(Dave Barry column, 2000-07-02)
</li>
<li>
"I once had sex for an hour and five minutes, but that was on the day
when you turn the clocks ahead."
(Garry Shandling, 52nd Annual Emmys, 2000-09-10)
</li>
<li>
"Would it impress you if I told you I invented Daylight Savings Time?"
("Sahjhan" to "Lilah" in dialog from the "Loyalty" episode of "Angel,"
originally aired 2002-02-25)
</li>
<li>
"I thought you said Tulsa was a three hour flight."
"Well, you're forgetting about the time difference."
("Chandler" and "Joey" in dialog from the episode of "Friends" first
aired 2002-12-05)
</li>
<li>
"Is that a pertinent fact,
or are you trying to dazzle me with your command of time zones?"
(Kelsey Grammer as "Frasier Crane")
</li>
<li>
"Don't worry about the world coming to an end today.
It is already tomorrow in Australia."
(Charles M. Schulz, provided by Steve Summit)
</li>
</ul>
</body>
</html>

View file

@ -0,0 +1,589 @@
<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Sources for Time Zone and Daylight Saving Time Data</title>
<link rel="schema.DC" href="http://purl.org/DC/elements/1.1/" />
<meta http-equiv="Content-type" content='text/html; charset="US-ASCII"' />
<meta name="DC.Creator" content="Eggert, Paul" />
<meta name="DC.Contributor" content="Olson, Arthur David" />
<meta name="DC.Date" content="2006-01-20" />
<meta name="DC.Description"
content="Sources of information about time zones and daylight saving time" />
<meta name="DC.Identifier" content="http://www.twinsun.com/tz/tz-link.htm" />
<meta name="Keywords"
content="database,daylight saving,DST,time zone,timezone,tz,zoneinfo" />
</head>
<body>
<h1>Sources for Time Zone and Daylight Saving Time Data</h1>
<address>
@(#)tz-link.htm 7.54
</address>
<p>
Please send corrections to this web page to the
<a href="mailto:tz@elsie.nci.nih.gov">time zone mailing list</a>.</p>
<h2>The <code>tz</code> database</h2>
<p>
The public-domain time zone database contains code and data
that represent the history of local time
for many representative locations around the globe.
It is updated periodically to reflect changes made by political bodies
to <a href="http://en.wikipedia.org/wiki/Time_zone">time zone</a>
boundaries, <a
href="http://en.wikipedia.org/wiki/Coordinated_Universal_Time"><abbr
title="Coordinated Universal Time">UTC</abbr></a> offsets, and
<a href="http://en.wikipedia.org/wiki/Daylight_saving">daylight-saving</a>
rules.
This database (often called <code>tz</code> or <code>zoneinfo</code>)
is used by several implementations,
including
<a href="http://www.gnu.org/software/libc/">the
<abbr title="GNU's Not Unix">GNU</abbr>
C Library</a> used in
<a href="http://www.linux.org/"><abbr>GNU</abbr>/Linux</a>,
<a href="http://www.freebsd.org/">FreeBSD</a>,
<a href="http://www.netbsd.org/">NetBSD</a>,
<a href="http://www.openbsd.org/">OpenBSD</a>,
<a href="http://www.cygwin.com/">Cygwin</a>,
<a href="http://www.delorie.com/djgpp/"><abbr
title="DJ's GNU Programming Platform">DJGPP</abbr></a>,
<a href="http://www.hp.com/products1/unix/operating/">HP-UX</a>,
<a href="http://www.sgi.com/developers/technology/irix/">IRIX</a>,
<a href="http://www.apple.com/macosx/">Mac OS X</a>,
<a href="http://h71000.www7.hp.com/">OpenVMS</a>,
<a href="http://www.sun.com/software/solaris/">Solaris</a>,
<a href="http://h30097.www3.hp.com/">Tru64</a>, and
<a href="http://www.sco.com/products/unixware/">UnixWare</a>.</p>
<p>
Each location in the database represents a national region where all
clocks keeping local time have agreed since 1970.
Locations are identified by continent or ocean and then by the name of
the location, which is typically the largest city within the region.
For example, <code>America/New_York</code>
represents most of the <abbr title="United States">US</abbr> eastern time zone;
<code>America/Phoenix</code> represents most of Arizona, which
uses mountain time without daylight saving time (<abbr
title="daylight saving time">DST</abbr>);
<code>America/Detroit</code> represents most of Michigan, which uses
eastern time but with different <abbr>DST</abbr> rules in 1975;
and other entries represent smaller regions like Starke County,
Indiana, which switched from central to eastern time in 1991
and switched back in 2006.
To use the database on an extended <a
href="http://en.wikipedia.org/wiki/POSIX"><abbr
title="Portable Operating System Interface">POSIX</abbr></a>
implementation set the <code>TZ</code> environment variable to
the location's full name, e.g., <code>TZ="America/New_York"</code>.</p>
<p>
In the <code>tz</code> database's
<a href="ftp://elsie.nci.nih.gov/pub/"><abbr
title="File Transfer Protocol">FTP</abbr> distribution</a>
the code is in the file <code>tzcode<var>C</var>.tar.gz</code>,
where <code><var>C</var></code> is the code's version;
similarly, the data are in <code>tzdata<var>D</var>.tar.gz</code>,
where <code><var>D</var></code> is the data's version.
The following shell commands download
these files to a <abbr>GNU</abbr>/Linux or similar host;
see the downloaded
<code>README</code> file for what to do next.</p>
<pre style="margin-left: 2em"><code><a href="http://www.gnu.org/software/wget/">wget</a> 'ftp://elsie.nci.nih.gov/pub/tz*.tar.gz'
<a href="http://www.gnu.org/software/gzip/">gzip</a> -dc tzcode*.tar.gz | <a href="http://www.gnu.org/software/tar/">tar</a> -xf -
gzip -dc tzdata*.tar.gz | tar -xf -
</code></pre>
<p>
The code lets you compile the <code>tz</code> source files into
machine-readable binary files, one for each location. It also lets
you read a <code>tz</code> binary file and interpret time stamps for that
location.</p>
<p>
The data are by no means authoritative. If you find errors, please
send changes to the <a href="mailto:tz@elsie.nci.nih.gov">time zone
mailing list</a>. You can also <a
href="mailto:tz-request@elsie.nci.nih.gov">subscribe</a> to the
mailing list, retrieve the <a
href="ftp://elsie.nci.nih.gov/pub/tzarchive.gz">archive of old
messages</a> (in gzip compressed format), or retrieve <a
href="ftp://munnari.oz.au/pub/oldtz/">archived older versions of code
and data</a>; there is also a smaller <a
href="http://public.planetmirror.com/pub/timezone/"><abbr
title="Hypertext Transfer Protocol">HTTP</abbr>
mirror</a>.</p>
<p>
The Web has several other sources for time zone and daylight saving time data.
Here are some recent links that may be of interest.
</p>
<h2>Web pages using recent versions of the <code>tz</code> database</h2>
<ul>
<li><a href="http://twiki.org/cgi-bin/xtra/tzdatepick.html">Date and Time Gateway</a>
is a text-based point-and-click interface to tables of current time
throughout the world.</li>
<li>Fancier web interfaces, roughly in ascending order of complexity, include:
<ul>
<li><a
href="http://www.convertit.com/Go/ConvertIt/World_Time/Current_Time.ASP">Current
Time in 1000 Places</a></li>
<li><a href="http://timezoneconverter.com/">Time Zone Converter</a></li>
</ul></li>
<li><a href="http://www.timeanddate.com/worldclock/">The World Clock -
Time Zones</a>
is a web interface to a time zone database derived from
<code>tz</code>'s.</li>
</ul>
<h2>Other time zone database formats</h2>
<ul>
<li>The <a href="ftp://ftp.rfc-editor.org/in-notes/rfc2445.txt">
Internet Calendaring and Scheduling Core Object Specification
(iCalendar)</a> specification published by the (now-concluded) <a
href="http://www.ietf.org/html.charters/OLD/calsch-charter.html"><abbr
title="Internet Engineering Task Force">IETF</abbr>
Calendaring and Scheduling Working Group (<abbr
title="Calendaring and Scheduling Working Group">calsch</abbr>)</a>
covers time zone
data; see its VTIMEZONE calendar component.
The <a href="http://www.calconnect.org/">Calendaring and Scheduling
Consortium</a> is promoting further work in this area. <a
href="ftp://ftp.rfc-editor.org/internet-drafts/draft-royer-ical-basic-04.txt">iCalendar
Basic</a> is a draft simplified definition that omits VTIMEZONE due to
its complexity, but this removal is expected to appear as an
independent specification later.</li>
<li><a
href="ftp://ftp.rfc-editor.org/internet-drafts/draft-royer-timezone-registry-03.txt">Time
Zone Registry</a> proposes an <a href="http://www.iana.org/"><abbr
title="Internet Assigned Numbers Authority">IANA</abbr></a> time zone
registration process that would establish unique names for each
version of each <code>tz</code> zone, along with a polygonal
representation of the geographical area corresponding to the
zone.</li>
<li>The <a
href="http://lists.w3.org/Archives/Public/www-rdf-calendar/">www-rdf-calendar</a>
list discusses <a
href="http://www.w3.org/RDF/"><abbr
title="Resource Description Framework">RDF</abbr></a>-based calendar
and group scheduling systems, and has a <a
href="http://www.w3.org/2002/12/cal/#tzd">workspace on time zone
data</a> converted from <code>tz</code>. An earlier <a
href="http://www.w3.org/2000/01/foo">schema</a> was sketched out.</li>
<li><a
href="ftp://ftp.rfc-editor.org/internet-drafts/draft-royer-calsch-xcal-03.txt"><abbr
title="iCalendar in XML Format">xCal-Basic</abbr></a>
is a draft <a
href="http://www.w3.org/XML/"><abbr
title="Extensible Markup Language">XML</abbr></a> document type
definition that corresponds to iCalendar.</li>
</ul>
<h2>Other <code>tz</code> compilers</h2>
<ul>
<li><a href="http://dialspace.dial.pipex.com/prod/dialspace/town/pipexdsl/s/asbm26/vzic/">Vzic iCalendar
Timezone Converter</a> describes a program Vzic that compiles
<code>tz</code> source into iCalendar-compatible VTIMEZONE files.
Vzic is freely
available under the <a
href="http://www.gnu.org/copyleft/gpl.html"><abbr>GNU</abbr>
General Public License (<abbr
title="General Public License">GPL</abbr>)</a>.</li>
<li><a
href="http://search.cpan.org/dist/DateTime-TimeZone/">DateTime::TimeZone</a>
contains a script <code>parse_olson</code> that compiles
<code>tz</code> source into <a href="http://www.perl.org/">Perl</a>
modules. It is part of the Perl <a
href="http://datetime.perl.org/">DateTime Project</a>, which is freely
available under both the <abbr>GPL</abbr> and the Perl Artistic
License. DateTime::TimeZone also contains a script
<code>tests_from_zdump</code> that generates test cases for each clock
transition in the <code>tz</code> database.</li>
<li><a href="http://www-306.ibm.com/software/globalization/icu/"><abbr
title="International Components for Unicode">ICU</abbr></a>
contains a C/C++ library for internationalization that
has a compiler from <code>tz</code> source
into an <abbr>ICU</abbr>-specific format.
<abbr>ICU</abbr> is freely available under a
<abbr title="Berkeley Software Distribution">BSD</abbr>-style license.</li>
<li><a href="http://joda-time.sourceforge.net/">Joda Time - Java date
and time <abbr title="Application Program Interface">API</abbr></a>
contains a class
<code>org.joda.time.tz.ZoneInfoCompiler</code> that compiles
<code>tz</code> source into a Joda-specific binary format. Joda Time
is freely available under a <abbr>BSD</abbr>-style license.</li>
<li><a href="http://sourceforge.net/projects/pytz/">PyTZ - Python Time
Zone Library</a> compiles <code>tz</code> source into
<a href="http://www.python.org/">Python</a>.
It is freely available under a <abbr>BSD</abbr>-style license.</li>
<li><a href="http://tzinfo.rubyforge.org/">TZInfo - Ruby Timezone Library</a>
compiles <code>tz</code> source into
<a href="http://www.ruby-lang.org/">Ruby</a>.
It is freely available under the <abbr
title="Massachusetts Institute of Technology">MIT</abbr> license.</li>
</ul>
<h2>Other <code>tz</code> binary file readers</h2>
<ul>
<li>The <a
href="http://www.gnu.org/software/libc/"><abbr>GNU</abbr> C
Library</a>
has an independent, thread-safe implementation of
a <code>tz</code> binary file reader.
This library is freely available under the
<a href="http://www.gnu.org/copyleft/lesser.html">
<abbr>GNU</abbr> Lesser General Public License
(<abbr title="Lesser General Public License">LGPL</abbr>)</a>,
and is widely used in <abbr>GNU</abbr>/Linux systems.</li>
<li><a href="http://www.bmsi.com/java/#TZ">ZoneInfo.java</a>
is a <code>tz</code> binary file reader written in Java.
It is freely available under the <abbr>LGPL</abbr>.</li>
<li><a href="http://s.keim.free.fr/tz/doc.html">Python time zones</a>
is a <code>tz</code> binary file reader written in Python.
It is freely available under a <abbr>BSD</abbr>-style license.</li>
</ul>
<h2>Other <code>tz</code>-based time zone software</h2>
<ul>
<li><a
href="http://users.skynet.be/Peter.Verthez/projects/intclock/">International
clock (intclock)</a> is a multi-timezone clock for
<abbr>GNU</abbr>/Linux and similar systems. It is freely available
under the <abbr>GPL</abbr>.</li>
<li><a href="http://java.sun.com/">Sun Java</a> releases since 1.4
contain a copy of a subset of a recent <code>tz</code> database in a
Java-specific format.</li>
<li><a
href="http://www1.tip.nl/~t876506/AboutTimeZonesHC.html">HyperCard
time zones calculator</a> was a HyperCard stack.</li>
<li><a
href="http://www.veladg.com/velaterra.html">VelaTerra</a> is
a Mac OS X program. Its developers
<a href="http://www.veladg.com/tzoffer.html">offer free
licenses</a> to <code>tz</code> contributors.</li>
<li><a
href="http://www.cimmyt.org/timezone/">World Time Explorer</a> is a
Microsoft Windows program.</li>
</ul>
<h2>Other time zone databases</h2>
<ul>
<li><a href="http://www.astro.com/cgi/aq.cgi?lang=e">Atlas Query</a>
is Astrodienst's Web version of Shanks's
excellent time zone history atlases published in both <a
href="http://astrocom.com/products/software.php?software_id=ibmwboth">computer</a>
and book form (<a
href="http://astrocom.com/products/book.php?book_id=b110x">one volume
for the USA</a>, and <a
href="http://astrocom.com/products/book.php?book_id=b112x">one for
other locations</a>) by <a
href="http://astrocom.com/">Astro Communications Services</a>.</li>
<li><a href="http://worldtime.com/">WORLDTIME: interactive atlas,
time info, public holidays</a>
contains information on local time, sunrise and sunset,
and public holidays in several hundred cities around the world.</li>
<li><a href="http://www.worldtimeserver.com/">World Time Server</a>
is another time zone database.</li>
<li><a href="http://tycho.usno.navy.mil/tzones.html">World Time Zones</a>
contains data from the Time Service Department of the
<abbr>US</abbr> Naval Observatory, used as the source
for the <code>usno*</code> files in the <code>tz</code> distribution.</li>
<li>The <a href="http://www.iata.org/ps/publications/9179.htm">Standard
Schedules Information Manual</a> of the
<a href="http://www.iata.org/index.htm">International Air Transport
Association</a>
gives current time zone rules for airports served by commercial aviation.</li>
</ul>
<h2>Maps</h2>
<ul>
<li>The <a href="http://www.odci.gov/">United States Central
Intelligence Agency (<abbr
title="Central Intelligence Agency">CIA</abbr>)</a> publishes a <a
href="http://www.odci.gov/cia/publications/factbook/reference_maps/pdf/time_zones.pdf">time
zone map</a>; the
<a
href="http://www.lib.utexas.edu/maps/world.html">Perry-Casta&ntilde;eda
Library Map Collection</a>
of the University of Texas at Austin has copies of
recent editions.
The pictorial quality is good,
but the maps do not indicate summer time,
and parts of the data are a few years out of date.</li>
<li><a href="http://worldtimezone.com/">Current time around the world
and standard time zones map of the world</a>
has several fancy time zone maps; it covers Russia particularly well.
The maps' pictorial quality is not quite as good as the
<abbr>CIA</abbr>'s
but the maps are more up to date.</li>
</ul>
<h2>Time zone boundaries</h2>
<ul>
<li><a href="http://www.statoids.com/statoids.html">Administrative Divisions
of Countries ("Statoids")</a> contains detailed lists of
<code>tz</code>-related zone subdivision data.</li>
<li><a href="http://home-4.tiscali.nl/~t876506/Multizones.html">Time
zone boundaries for multizone countries</a> summarizes legal
boundaries between time zones within countries.</li>
<li>Manifold.net's <a
href="http://www.manifold.net/download/freemaps.html">Free Maps and
<abbr title="Geographic Information Systems">GIS</abbr>
Data</a> includes a Manifold-format map of
world time zone boundaries distributed under the
<abbr>GPL</abbr>.</li>
<li>The <abbr>US</abbr> Geological Survey's National Atlas of
the United States
publishes the <a href="http://nationalatlas.gov/mld/timeznp.html">Time
Zones of the United States</a> in the public domain.</li>
<li>The GeoCommunity lists several commercial sources for <a
href="http://spatialnews.geocomm.com/features/timezones/">International
Time Zones and Time Zone Data</a>.</li>
</ul>
<h2>Civil time concepts and history</h2>
<ul>
<li><a href="http://physics.nist.gov/GenInt/Time/time.html">A
Walk through Time</a>
surveys the evolution of timekeeping.</li>
<li><a href="http://webexhibits.org/daylightsaving/">About Daylight
Saving Time - History, rationale, laws &amp; dates</a>
is an overall history of <abbr>DST</abbr>.</li>
<li><a href="http://www.energy.ca.gov/daylightsaving.html">Saving Time,
Saving Energy</a> discusses a primary justification for <abbr>DST</abbr>.</li>
<li><a href="http://www.seizethedaylight.com/dst/">Who Knew? A Brief
History of Daylight Saving Time</a> summarizes some of the contentious
history of <abbr>DST</abbr>.</li>
<li><a href="http://toi.iriti.cnr.it/">The
Time of Internet</a>
describes time zones and daylight saving time,
with diagrams.
The time zone map is out of date, however.</li>
<li><a href="http://www.phys.uu.nl/~vgent/idl/idl.htm">A History of
the International Date Line</a> tells the story of the most important
time zone boundary.</li>
<li><a href="http://www.statoids.com/tconcept.html">Basic Time
Zone Concepts</a> discusses terminological issues behind time zones.</li>
</ul>
<h2>National histories of legal time</h2>
<dl>
<dt>Australia</dt>
<dd>The Bureau of Metrology publishes a list of
<a href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml">Implementation Dates of Daylight Savings Time within Australia</a>.</dd>
<dt>Austria</dt>
<dd>The Federal Office of Metrology and Surveying publishes a
table of <a href="http://www.metrologie.at/pdf/sommerzeit.pdf"
hreflang="de">daylight saving time in Austria (in German)</a>.</dd>
<dt>Belgium</dt>
<dd>The Royal Observatory of Belgium maintains a table of <a
href="http://www.astro.oma.be/GENERAL/INFO/nli001a.html"
hreflang="nl">time in Belgium (in Dutch)</a>.</dd>
<dt>Brazil</dt>
<dd>The Time Service Department of the National Observatory
records <a href="http://pcdsh01.on.br/DecHV.html"
hreflang="pt-BR">Brazil's daylight saving time decrees (in
Portuguese)</a>.</dd>
<dt>Canada</dt>
<dd>The Institute for National Measurement Standards publishes current
and some older information about <a
href="http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php">Time
Zones &amp; Daylight Saving Time</a>.</dd>
<dt>Chile</dt>
<dd>WebExhibits publishes a <a
href="http://webexhibits.org/daylightsaving/chile.html"
hreflang="es">history of official time (in Spanish)</a> originally
written by the Chilean Hydrographic and Oceanographic Service.</dd>
<dt>Germany</dt>
<dd>The National Institute for Science and Technology maintains the <a
href="http://www.ptb.de/en/org/4/44/441/dars_e.htm">Realisation of
Legal Time in Germany</a>.</dd>
<dt>Israel</dt>
<dd>The Interior Ministry periodically issues <a
href="ftp://ftp.cs.huji.ac.il/pub/tz/announcements/"
hreflang="he">announcements (in Hebrew)</a>.</dd>
<dt>Mexico</dt>
<dd>The Investigation and Analysis Service of the Mexican Library of
Congress has published a <a
href="http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/"
hreflang="es">history of Mexican local time (in Spanish)</a>.</dd>
<dt>Malaysia</dt>
<dd>See Singapore below.</dd>
<dt>Netherlands</dt>
<dd><a href="http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm"
hreflang="nl">Legal time in the Netherlands (in Dutch)</a>
covers the history of local time in the Netherlands from ancient times.</dd>
<dt>New Zealand</dt>
<dd>The Department of Internal Affairs maintains a brief history <a
href="http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Resource-material-Information-We-Provide-About-Daylight-Saving">About
Daylight Saving</a>. The privately-maintained <a
href="http://www.astrologyschool.com/nztime.html">History of New Zealand
time</a> has more details.</dd>
<dt>Norway</dt>
<dd>The Norwegian Meteorological Institute lists
<a href="http://met.no/met/met_lex/q_u/sommertid.html" hreflang="no">Summer
time in Norway (in Norwegian)</a>, citing the
Institute of Theoretical Astrophysics, Oslo.</dd>
<dt>Singapore</dt>
<dd><a
href="http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html">Why
is Singapore in the "Wrong" Time Zone?</a> details the
history of legal time in Singapore and Malaysia.</dd>
<dt>United Kingdom</dt>
<dd><a
href="http://www.srcf.ucam.org/~jsm28/british-time/">History of
legal time in Britain</a> discusses in detail the country
with perhaps the best-documented history of clock adjustments.
The National Physical Laboratory also maintains an <a
href="http://www.npl.co.uk/time/summer_time_archive.html">Archive
of Summer time dates</a>.</dd>
</dl>
<h2>Precision timekeeping</h2>
<ul>
<li><a
href="http://literature.agilent.com/litweb/pdf/5965-7984E.pdf">The
Science of Timekeeping</a> is a thorough introduction
to the theory and practice of precision timekeeping.</li>
<li><a href="http://www.ntp.org/"><abbr
title="Network Time Protocol">NTP</abbr>: The Network
Time Protocol</a>
discusses how to synchronize clocks of
Internet hosts.</li>
<li><a href="http://gauss.gge.unb.ca/GMT.UT.and.the.RGO.html">A Few
Facts Concerning <abbr title="Greenwich Mean Time">GMT</abbr>, <abbr
title="Universal Time">UT</abbr>, and
the <abbr title="Royal Greenwich Observatory">RGO</abbr></a>
answers questions like "What is the
difference between <abbr>GMT</abbr> and <abbr>UTC</abbr>?"</li>
<li><a
href="http://www.cv.nrao.edu/~rfisher/Ephemerides/times.html">Astronomical
Times</a> explains more abstruse astronomical time scales like
<abbr title="Terrestrial Dynamic Time">TDT</abbr>,
<abbr title="Geocentric Coordinate Time">TCG</abbr>, and
<abbr title="Barycentric Dynamic Time">TDB</abbr>.
<a href="http://www.ucolick.org/~sla/leapsecs/timescales.html">Time
Scales</a> goes into more detail, particularly for historical variants.</li>
<li>The <a href="http://www.iau.org/"><abbr
title="International Astronomical Union">IAU</abbr></a>'s <a
href="http://www.iau-sofa.rl.ac.uk/"><abbr
title="Standards Of Fundamental Astronomy">SOFA</abbr></a>
initiative publishes Fortran
code for converting among time scales like
<abbr title="International Atomic Time">TAI</abbr>,
<abbr>TDB</abbr>, <abbr>TDT</abbr> and
<abbr>UTC</abbr>.</li>
<li><a href="http://www.jpl.nasa.gov/basics/bsf2-3.htm">Basics of
Space Flight - Reference Systems - Time Conventions</a>
briefly explains interplanetary space flight timekeeping.</li>
<li><a
href="http://www.giss.nasa.gov/tools/mars24/help/notes.html">Technical
Notes on Mars Solar Time as Adopted by the Mars24 Sunclock</a> briefly
describes Mars Coordinated Time (<abbr
title="Mars Coordinated Time">MTC</abbr>) and the
diverse local time
scales used by each landed mission on Mars.</li>
<li><a href="http://www.leapsecond.com/">LeapSecond.com</a> is
dedicated not only to leap seconds but to precise time and frequency
in general. It covers the state of the art in amateur timekeeping, and
how the art has progressed over the past few decades.</li>
<li><a
href="http://hpiers.obspm.fr/eop-pc/products/bulletins/bulletins.html">Bulletins
maintained by the
<abbr title="International Earth Rotation Service">IERS</abbr>
<abbr title="Earth Orientation Parameters">EOP</abbr>
(<abbr title="Product Center">PC</abbr>)</a> contains official publications of
the Earth Orientation Parameters Product Center of the
International Earth Rotation Service, the committee that decides
when leap seconds occur.</li>
<li>The <a
href="http://www.mail-archive.com/leapsecs@rom.usno.navy.mil/">Leap
Second Discussion List</a> and <a
href="http://rom.usno.navy.mil/archives/leapsecs.html">archive</a> covers <a
href="http://gauss.gge.unb.ca/papers.pdf/gpsworld.november99.pdf">McCarthy
and Klepczynski's proposal to discontinue leap seconds</a>, published in <a
href="http://www.gpsworld.com/gpsworld/"><abbr
title="Global Positioning System">GPS</abbr> World</a>
<strong>10</strong>, 11
(1999-11), 50&ndash;57 and discussed further in R. A. Nelson et al.,
<a href="http://www.cl.cam.ac.uk/~mgk25/time/metrologia-leapsecond.pdf">The
leap second: its history and possible future</a>,
<a href="http://www.bipm.fr/metrologia/index.html">Metrologia</a>
<strong>38</strong> (2001), 509&ndash;529.
<a href="http://www.ucolick.org/~sla/leapsecs/">The
Future of Leap Seconds</a> covers this
contentious issue.</li>
</ul>
<h2>Time notation</h2>
<ul>
<li>
<a href="http://www.cl.cam.ac.uk/~mgk25/iso-time.html">A Summary of
the International Standard Date and Time Notation</a> is a good
summary of
<a
href="http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=40874"><abbr
title="International Organization for Standardization">ISO</abbr>
8601:2004 -- Data elements and interchange formats -- Information
interchange -- Representation of dates and times</a>.</li>
<li>
<a href="http://www.w3.org/TR/xmlschema-2/#dateTime"><abbr>XML</abbr>
Schema: Datatypes - dateTime</a> specifies a format inspired by
<abbr>ISO</abbr> 8601 that is in common use in <abbr>XML</abbr> data.</li>
<li>
Section 3.3 of <a
href="ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt">Internet
<abbr title="Request For Comments">RFC</abbr> 2822</a>
specifies the time notation used in email and <a
href="ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt"><abbr>HTTP</abbr></a>
headers.</li>
<li>
<a href="ftp://ftp.rfc-editor.org/in-notes/rfc3339.txt">Internet
<abbr>RFC</abbr> 3339</a> specifies an <abbr>ISO</abbr> 8601
profile for use in new Internet
protocols.</li>
<li>
<a href="http://www.hackcraft.net/web/datetime/">Date &amp; Time
Formats on the Web</a> surveys web- and Internet-oriented date and time
formats.</li>
<li>
<a href="http://www.exit109.com/~ghealton/y2k/yrexamples.html">The
Best of Dates, the Worst of Dates</a> covers many problems encountered
by software developers when handling dates and time stamps.</li>
<li><a
href="http://www-306.ibm.com/software/globalization/icu/"><abbr>ICU</abbr></a>
contains a mechanism for localizing time zone
labels and abbreviations; for example, one can use it to specify
Russian translations for "Eastern European Summer Time",
"<abbr title="Eastern European Summer Time">EEST</abbr>",
and <code>Europe/Bucharest</code>.
This mechanism is part of the
<a href="http://unicode.org/cldr/">Unicode
<abbr title="Common Locale Data Repository">CLDR</abbr> Project</a>;
for example, the <a
href="http://unicode.org/cldr/data/diff/by_type/dates_timeZoneNames.html"><abbr>CLDR</abbr> Sideways Data for dates_timeZoneNames</a>
shows values for time zone names in many locales.</li>
<li>Alphabetic time zone abbreviations should not be used as unique
identifiers for <abbr>UTC</abbr> offsets as they are ambiguous in
practice. For example, "<abbr>EST</abbr>" denotes 5 hours behind
<abbr>UTC</abbr> in English-speaking North America, but it denotes 10
or 11 hours ahead of <abbr>UTC</abbr> in Australia; and
French-speaking North Americans prefer
"<abbr title="Heure Normale de l'Est">HNE</abbr>" to
"<abbr>EST</abbr>". For <abbr>POSIX</abbr> the <code>tz</code>
database contains English abbreviations for all time stamps but in
many cases these are merely inventions of the database
maintainers.</li>
<li>Numeric time zone abbreviations typically count hours east of
<abbr>UTC</abbr>, e.g., <code>+09</code> for Japan and
<code>-10</code> for Hawaii. However, the <abbr>POSIX</abbr>
<code>TZ</code> environment variable uses the opposite convention. For
example, one might use <code>TZ="JST-9"</code> and
<code>TZ="HST10"</code> for Japan and Hawaii, respectively. If the
<code>tz</code> database is available, it is usually better to use
settings like <code>TZ="Asia/Tokyo"</code> and
<code>TZ="Pacific/Honolulu"</code> instead, as this should avoid
confusion, handle old time stamps better, and insulate you better from
any future changes to the rules. One should never set
<abbr>POSIX</abbr> <code>TZ</code> to a value like
<code>"GMT-9"</code>, though, since this would falsely claim that
local time is nine hours ahead of <abbr>UTC</abbr> and the time zone
is called "<abbr>GMT</abbr>".</li>
</ul>
<h2>Related indexes</h2>
<ul>
<li><a href="tz-art.htm">Time and the Arts</a></li>
<li><a href="http://dmoz.org/Reference/Time/">Open Directory -
Reference: Time</a></li>
<li><a href="http://directory.google.com/Top/Reference/Time/">Google Directory
- Reference &gt; Time</a></li>
<li><a href="http://dir.yahoo.com/Science/Measurements_and_Units/Time/">Yahoo!
Directory &gt; Science &gt; Measurements and Units &gt; Time</a></li>
</ul>
</body>
</html>

138
commands/zoneinfo/tzfile.5 Normal file
View file

@ -0,0 +1,138 @@
.TH TZFILE 5
.SH NAME
tzfile \- time zone information
.SH SYNOPSIS
.B
#include <tzfile.h>
.SH DESCRIPTION
The time zone information files used by
.IR tzset (3)
begin with the magic characters "TZif" to identify then as
time zone information files,
followed by sixteen bytes reserved for future use,
followed by six four-byte values of type
.BR long ,
written in a ``standard'' byte order
(the high-order byte of the value is written first).
These values are,
in order:
.TP
.I tzh_ttisgmtcnt
The number of UTC/local indicators stored in the file.
.TP
.I tzh_ttisstdcnt
The number of standard/wall indicators stored in the file.
.TP
.I tzh_leapcnt
The number of leap seconds for which data is stored in the file.
.TP
.I tzh_timecnt
The number of "transition times" for which data is stored
in the file.
.TP
.I tzh_typecnt
The number of "local time types" for which data is stored
in the file (must not be zero).
.TP
.I tzh_charcnt
The number of characters of "time zone abbreviation strings"
stored in the file.
.PP
The above header is followed by
.I tzh_timecnt
four-byte values of type
.BR long ,
sorted in ascending order.
These values are written in ``standard'' byte order.
Each is used as a transition time (as returned by
.IR time (2))
at which the rules for computing local time change.
Next come
.I tzh_timecnt
one-byte values of type
.BR "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
.I ttinfo
structures that appears next in the file;
these structures are defined as follows:
.in +.5i
.sp
.nf
.ta .5i +\w'unsigned int\0\0'u
struct ttinfo {
long tt_gmtoff;
int tt_isdst;
unsigned int tt_abbrind;
};
.in -.5i
.fi
.sp
Each structure is written as a four-byte value for
.I tt_gmtoff
of type
.BR long ,
in a standard byte order, followed by a one-byte value for
.I tt_isdst
and a one-byte value for
.IR tt_abbrind .
In each structure,
.I tt_gmtoff
gives the number of seconds to be added to UTC,
.I tt_isdst
tells whether
.I tm_isdst
should be set by
.I localtime (3)
and
.I tt_abbrind
serves as an index into the array of time zone abbreviation characters
that follow the
.I ttinfo
structure(s) in the file.
.PP
Then there are
.I tzh_leapcnt
pairs of four-byte values, written in standard byte order;
the first value of each pair gives the time
(as returned by
.IR time(2))
at which a leap second occurs;
the second gives the
.I total
number of leap seconds to be applied after the given time.
The pairs of values are sorted in ascending order by time.
.PP
Then there are
.I 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 POSIX-style
time zone environment variables.
.PP
Finally there are
.I tzh_ttisgmtcnt
UTC/local indicators, each stored as a one-byte value;
they tell whether the transition times associated with local time types
were specified as UTC or local time,
and are used when a time zone file is used in handling POSIX-style
time zone environment variables.
.PP
.I Localtime
uses the first standard-time
.I ttinfo
structure in the file
(or simply the first
.I ttinfo
structure in the absence of a standard-time structure)
if either
.I tzh_timecnt
is zero or the time argument is less than the first transition time recorded
in the file.
.SH SEE ALSO
newctime(3)
.\" @(#)tzfile.5 7.12
.\" This file is in the public domain, so clarified as of
.\" 1996-06-05 by Arthur David Olson.

View file

@ -0,0 +1,93 @@
NAME
tzfile - time zone information
SYNOPSIS
#include <tzfile.h>
DESCRIPTION
The time zone information files used by tzset(3) begin with
the magic characters "TZif" to identify then as time zone
information files, followed by sixteen bytes reserved for
future use, followed by six four-byte values of type long,
written in a ``standard'' byte order (the high-order byte of
the value is written first). These values are, in order:
tzh_ttisgmtcnt
The number of UTC/local indicators stored in the file.
tzh_ttisstdcnt
The number of standard/wall indicators stored in the
file.
tzh_leapcnt
The number of leap seconds for which data is stored in
the file.
tzh_timecnt
The number of "transition times" for which data is
stored in the file.
tzh_typecnt
The number of "local time types" for which data is
stored in the file (must not be zero).
tzh_charcnt
The number of characters of "time zone abbreviation
strings" stored in the file.
The above header is followed by tzh_timecnt four-byte values
of type long, sorted in ascending order. These values are
written in ``standard'' byte order. Each is used as a
transition time (as returned by time(2)) at which the rules
for computing local time change. Next come tzh_timecnt
one-byte values of type 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 ttinfo
structures that appears next in the file; these structures
are defined as follows:
struct ttinfo {
long tt_gmtoff;
int tt_isdst;
unsigned int tt_abbrind;
};
Each structure is written as a four-byte value for tt_gmtoff
of type long, in a standard byte order, followed by a one-
byte value for tt_isdst and a one-byte value for tt_abbrind.
In each structure, tt_gmtoff gives the number of seconds to
be added to UTC, tt_isdst tells whether tm_isdst should be
set by localtime (3) and tt_abbrind serves as an index into
the array of time zone abbreviation characters that follow
the ttinfo structure(s) in the file.
Then there are tzh_leapcnt pairs of four-byte values,
written in standard byte order; the first value of each pair
gives the time (as returned by time(2)) at which a leap
second occurs; the second gives the total number of leap
seconds to be applied after the given time. The pairs of
values are sorted in ascending order by time.
Then there are 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 POSIX-style time zone
environment variables.
Finally there are tzh_ttisgmtcnt UTC/local indicators, each
stored as a one-byte value; they tell whether the transition
times associated with local time types were specified as UTC
or local time, and are used when a time zone file is used in
handling POSIX-style time zone environment variables.
Localtime uses the first standard-time ttinfo structure in
the file (or simply the first ttinfo structure in the
absence of a standard-time structure) if either tzh_timecnt
is zero or the time argument is less than the first
transition time recorded in the file.
SEE ALSO
newctime(3)

175
commands/zoneinfo/tzfile.h Normal file
View file

@ -0,0 +1,175 @@
#ifndef TZFILE_H
#define TZFILE_H
/*
** This file is in the public domain, so clarified as of
** 1996-06-05 by Arthur David Olson.
*/
/*
** This header is for use ONLY with the time conversion code.
** There is no guarantee that it will remain unchanged,
** or that it will remain at all.
** Do NOT copy it to any system include directory.
** Thank you!
*/
/*
** ID
*/
#ifndef lint
#ifndef NOID
static char tzfilehid[] = "@(#)tzfile.h 7.18";
#endif /* !defined NOID */
#endif /* !defined lint */
/*
** Information about time zone files.
*/
#ifndef TZDIR
#define TZDIR "/usr/local/etc/zoneinfo" /* Time zone object file directory */
#endif /* !defined TZDIR */
#ifndef TZDEFAULT
#define TZDEFAULT "localtime"
#endif /* !defined TZDEFAULT */
#ifndef TZDEFRULES
#define TZDEFRULES "posixrules"
#endif /* !defined TZDEFRULES */
/*
** Each file begins with. . .
*/
#define TZ_MAGIC "TZif"
struct tzhead {
char tzh_magic[4]; /* TZ_MAGIC */
char tzh_reserved[16]; /* reserved for future use */
char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */
char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
char tzh_leapcnt[4]; /* coded number of leap seconds */
char tzh_timecnt[4]; /* coded number of transition times */
char tzh_typecnt[4]; /* coded number of local time types */
char tzh_charcnt[4]; /* coded number of abbr. chars */
};
/*
** . . .followed by. . .
**
** tzh_timecnt (char [4])s coded transition times a la time(2)
** tzh_timecnt (unsigned char)s types of local time starting at above
** tzh_typecnt repetitions of
** one (char [4]) coded UTC offset in seconds
** one (unsigned char) used to set tm_isdst
** one (unsigned char) that's an abbreviation list index
** tzh_charcnt (char)s '\0'-terminated zone abbreviations
** tzh_leapcnt repetitions of
** one (char [4]) coded leap second transition times
** one (char [4]) total correction after above
** tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition
** time is standard time, if FALSE,
** transition time is wall clock time
** if absent, transition times are
** assumed to be wall clock time
** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition
** time is UTC, if FALSE,
** transition time is local time
** if absent, transition times are
** assumed to be local time
*/
/*
** In the current implementation, "tzset()" refuses to deal with files that
** exceed any of the limits below.
*/
#ifndef TZ_MAX_TIMES
/*
** The TZ_MAX_TIMES value below is enough to handle a bit more than a
** year's worth of solar time (corrected daily to the nearest second) or
** 138 years of Pacific Presidential Election time
** (where there are three time zone transitions every fourth year).
*/
#define TZ_MAX_TIMES 370
#endif /* !defined TZ_MAX_TIMES */
#ifndef TZ_MAX_TYPES
#ifndef NOSOLAR
#define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */
#endif /* !defined NOSOLAR */
#ifdef NOSOLAR
/*
** Must be at least 14 for Europe/Riga as of Jan 12 1995,
** as noted by Earl Chew.
*/
#define TZ_MAX_TYPES 20 /* Maximum number of local time types */
#endif /* !defined NOSOLAR */
#endif /* !defined TZ_MAX_TYPES */
#ifndef TZ_MAX_CHARS
#define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */
/* (limited by what unsigned chars can hold) */
#endif /* !defined TZ_MAX_CHARS */
#ifndef TZ_MAX_LEAPS
#define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */
#endif /* !defined TZ_MAX_LEAPS */
#define SECSPERMIN 60
#define MINSPERHOUR 60
#define HOURSPERDAY 24
#define DAYSPERWEEK 7
#define DAYSPERNYEAR 365
#define DAYSPERLYEAR 366
#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
#define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY)
#define MONSPERYEAR 12
#define TM_SUNDAY 0
#define TM_MONDAY 1
#define TM_TUESDAY 2
#define TM_WEDNESDAY 3
#define TM_THURSDAY 4
#define TM_FRIDAY 5
#define TM_SATURDAY 6
#define TM_JANUARY 0
#define TM_FEBRUARY 1
#define TM_MARCH 2
#define TM_APRIL 3
#define TM_MAY 4
#define TM_JUNE 5
#define TM_JULY 6
#define TM_AUGUST 7
#define TM_SEPTEMBER 8
#define TM_OCTOBER 9
#define TM_NOVEMBER 10
#define TM_DECEMBER 11
#define TM_YEAR_BASE 1900
#define EPOCH_YEAR 1970
#define EPOCH_WDAY TM_THURSDAY
#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
/*
** Since everything in isleap is modulo 400 (or a factor of 400), we know that
** isleap(y) == isleap(y % 400)
** and so
** isleap(a + b) == isleap((a + b) % 400)
** or
** isleap(a + b) == isleap(a % 400 + b % 400)
** This is true even if % means modulo rather than Fortran remainder
** (which is allowed by C89 but not C99).
** We use this to avoid addition overflow problems.
*/
#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400)
#endif /* !defined TZFILE_H */

View file

@ -0,0 +1,41 @@
.TH TZSELECT 8
.SH NAME
tzselect \- select a time zone
.SH SYNOPSIS
.B tzselect
.SH DESCRIPTION
The
.B tzselect
program asks the user for information about the current location,
and outputs the resulting time zone description to standard output.
The output is suitable as a value for the TZ environment variable.
.PP
All interaction with the user is done via standard input and standard error.
.SH "ENVIRONMENT VARIABLES"
.TP
\f3AWK\fP
Name of a Posix-compliant
.I awk
program (default:
.BR awk ).
.TP
\f3TZDIR\fP
Name of the directory containing time zone data files (default:
.BR /usr/local/etc/zoneinfo ).
.SH FILES
.TP
\f2TZDIR\fP\f3/iso3166.tab\fP
Table of ISO 3166 2-letter country codes and country names.
.TP
\f2TZDIR\fP\f3/zone.tab\fP
Table of country codes, latitude and longitude, TZ values, and
descriptive comments.
.TP
\f2TZDIR\fP\f3/\fP\f2TZ\fP
Time zone data file for time zone \f2TZ\fP.
.SH "EXIT STATUS"
The exit status is zero if a time zone was successfully obtained from the user,
nonzero otherwise.
.SH "SEE ALSO"
newctime(3), tzfile(5), zdump(8), zic(8)
.\" @(#)tzselect.8 1.3

View file

@ -0,0 +1,41 @@
NAME
tzselect - select a time zone
SYNOPSIS
tzselect
DESCRIPTION
The tzselect program asks the user for information about the
current location, and outputs the resulting time zone
description to standard output. The output is suitable as a
value for the TZ environment variable.
All interaction with the user is done via standard input and
standard error.
ENVIRONMENT VARIABLES
AWK Name of a Posix-compliant awk program (default: awk).
TZDIR
Name of the directory containing time zone data files
(default: /usr/local/etc/zoneinfo).
FILES
TZDIR/iso3166.tab
Table of ISO 3166 2-letter country codes and country
names.
TZDIR/zone.tab
Table of country codes, latitude and longitude, TZ
values, and descriptive comments.
TZDIR/TZ
Time zone data file for time zone TZ.
EXIT STATUS
The exit status is zero if a time zone was successfully
obtained from the user, nonzero otherwise.
SEE ALSO
newctime(3), tzfile(5), zdump(8), zic(8)

View file

@ -0,0 +1,308 @@
#! /bin/ksh
# '@(#)tzselect.ksh 1.8'
# Ask the user about the time zone, and output the resulting TZ value to stdout.
# Interact with the user via stderr and stdin.
# Contributed by Paul Eggert.
# Porting notes:
#
# This script requires several features of the Korn shell.
# If your host lacks the Korn shell,
# you can use either of the following free programs instead:
#
# <a href=ftp://ftp.gnu.org/pub/gnu/>
# Bourne-Again shell (bash)
# </a>
#
# <a href=ftp://ftp.cs.mun.ca/pub/pdksh/pdksh.tar.gz>
# Public domain ksh
# </a>
#
# This script also uses several features of modern awk programs.
# If your host lacks awk, or has an old awk that does not conform to Posix.2,
# you can use either of the following free programs instead:
#
# <a href=ftp://ftp.gnu.org/pub/gnu/>
# GNU awk (gawk)
# </a>
#
# <a href=ftp://ftp.whidbey.net/pub/brennan/>
# mawk
# </a>
# Specify default values for environment variables if they are unset.
: ${AWK=awk}
: ${TZDIR=$(pwd)}
# Check for awk Posix compliance.
($AWK -v x=y 'BEGIN { exit 123 }') </dev/null >/dev/null 2>&1
[ $? = 123 ] || {
echo >&2 "$0: Sorry, your \`$AWK' program is not Posix compatible."
exit 1
}
# Make sure the tables are readable.
TZ_COUNTRY_TABLE=$TZDIR/iso3166.tab
TZ_ZONE_TABLE=$TZDIR/zone.tab
for f in $TZ_COUNTRY_TABLE $TZ_ZONE_TABLE
do
<$f || {
echo >&2 "$0: time zone files are not set up correctly"
exit 1
}
done
newline='
'
IFS=$newline
# Work around a bug in bash 1.14.7 and earlier, where $PS3 is sent to stdout.
case $(echo 1 | (select x in x; do break; done) 2>/dev/null) in
?*) PS3=
esac
# Begin the main loop. We come back here if the user wants to retry.
while
echo >&2 'Please identify a location' \
'so that time zone rules can be set correctly.'
continent=
country=
region=
# Ask the user for continent or ocean.
echo >&2 'Please select a continent or ocean.'
select continent in \
Africa \
Americas \
Antarctica \
'Arctic Ocean' \
Asia \
'Atlantic Ocean' \
Australia \
Europe \
'Indian Ocean' \
'Pacific Ocean' \
'none - I want to specify the time zone using the Posix TZ format.'
do
case $continent in
'')
echo >&2 'Please enter a number in range.';;
?*)
case $continent in
Americas) continent=America;;
*' '*) continent=$(expr "$continent" : '\([^ ]*\)')
esac
break
esac
done
case $continent in
'')
exit 1;;
none)
# Ask the user for a Posix TZ string. Check that it conforms.
while
echo >&2 'Please enter the desired value' \
'of the TZ environment variable.'
echo >&2 'For example, GST-10 is a zone named GST' \
'that is 10 hours ahead (east) of UTC.'
read TZ
$AWK -v TZ="$TZ" 'BEGIN {
tzname = "[^-+,0-9][^-+,0-9][^-+,0-9]+"
time = "[0-2]?[0-9](:[0-5][0-9](:[0-5][0-9])?)?"
offset = "[-+]?" time
date = "(J?[0-9]+|M[0-9]+\.[0-9]+\.[0-9]+)"
datetime = "," date "(/" time ")?"
tzpattern = "^(:.*|" tzname offset "(" tzname \
"(" offset ")?(" datetime datetime ")?)?)$"
if (TZ ~ tzpattern) exit 1
exit 0
}'
do
echo >&2 "\`$TZ' is not a conforming" \
'Posix time zone string.'
done
TZ_for_date=$TZ;;
*)
# Get list of names of countries in the continent or ocean.
countries=$($AWK -F'\t' \
-v continent="$continent" \
-v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \
'
/^#/ { next }
$3 ~ ("^" continent "/") {
if (!cc_seen[$1]++) cc_list[++ccs] = $1
}
END {
while (getline <TZ_COUNTRY_TABLE) {
if ($0 !~ /^#/) cc_name[$1] = $2
}
for (i = 1; i <= ccs; i++) {
country = cc_list[i]
if (cc_name[country]) {
country = cc_name[country]
}
print country
}
}
' <$TZ_ZONE_TABLE | sort -f)
# If there's more than one country, ask the user which one.
case $countries in
*"$newline"*)
echo >&2 'Please select a country.'
select country in $countries
do
case $country in
'') echo >&2 'Please enter a number in range.';;
?*) break
esac
done
case $country in
'') exit 1
esac;;
*)
country=$countries
esac
# Get list of names of time zone rule regions in the country.
regions=$($AWK -F'\t' \
-v country="$country" \
-v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \
'
BEGIN {
cc = country
while (getline <TZ_COUNTRY_TABLE) {
if ($0 !~ /^#/ && country == $2) {
cc = $1
break
}
}
}
$1 == cc { print $4 }
' <$TZ_ZONE_TABLE)
# If there's more than one region, ask the user which one.
case $regions in
*"$newline"*)
echo >&2 'Please select one of the following' \
'time zone regions.'
select region in $regions
do
case $region in
'') echo >&2 'Please enter a number in range.';;
?*) break
esac
done
case $region in
'') exit 1
esac;;
*)
region=$regions
esac
# Determine TZ from country and region.
TZ=$($AWK -F'\t' \
-v country="$country" \
-v region="$region" \
-v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \
'
BEGIN {
cc = country
while (getline <TZ_COUNTRY_TABLE) {
if ($0 !~ /^#/ && country == $2) {
cc = $1
break
}
}
}
$1 == cc && $4 == region { print $3 }
' <$TZ_ZONE_TABLE)
# Make sure the corresponding zoneinfo file exists.
TZ_for_date=$TZDIR/$TZ
<$TZ_for_date || {
echo >&2 "$0: time zone files are not set up correctly"
exit 1
}
esac
# Use the proposed TZ to output the current date relative to UTC.
# Loop until they agree in seconds.
# Give up after 8 unsuccessful tries.
extra_info=
for i in 1 2 3 4 5 6 7 8
do
TZdate=$(LANG=C TZ="$TZ_for_date" date)
UTdate=$(LANG=C TZ=UTC0 date)
TZsec=$(expr "$TZdate" : '.*:\([0-5][0-9]\)')
UTsec=$(expr "$UTdate" : '.*:\([0-5][0-9]\)')
case $TZsec in
$UTsec)
extra_info="
Local time is now: $TZdate.
Universal Time is now: $UTdate."
break
esac
done
# Output TZ info and ask the user to confirm.
echo >&2 ""
echo >&2 "The following information has been given:"
echo >&2 ""
case $country+$region in
?*+?*) echo >&2 " $country$newline $region";;
?*+) echo >&2 " $country";;
+) echo >&2 " TZ='$TZ'"
esac
echo >&2 ""
echo >&2 "Therefore TZ='$TZ' will be used.$extra_info"
echo >&2 "Is the above information OK?"
ok=
select ok in Yes No
do
case $ok in
'') echo >&2 'Please enter 1 for Yes, or 2 for No.';;
?*) break
esac
done
case $ok in
'') exit 1;;
Yes) break
esac
do :
done
case $SHELL in
*csh) file=.login line="setenv TZ '$TZ'";;
*) file=.profile line="TZ='$TZ'; export TZ"
esac
echo >&2 "
You can make this change permanent for yourself by appending the line
$line
to the file '$file' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the $0 command in shell scripts:"
echo "$TZ"

111
commands/zoneinfo/usno1988 Normal file
View file

@ -0,0 +1,111 @@
# @(#)usno1988 7.2
#
# From Arthur David Olson (1989-01-19):
#
# 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

452
commands/zoneinfo/usno1989 Normal file
View file

@ -0,0 +1,452 @@
# @(#)usno1989 7.2
#
# From Arthur David Olson (1989-01-19):
#
# 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

452
commands/zoneinfo/usno1989a Normal file
View file

@ -0,0 +1,452 @@
# @(#)usno1989a 7.4
#
# From Arthur David Olson (1994-02-07):
#
# Here's time zone information from the United States Naval Observatory,
# with corrections from Paul Eggert.
# 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
EQUATORIAL 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
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 ISLANDS 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
OMAN 4 H AHEAD OF UTC
PACIFIC ISLAND T.T.
PALAU ISLANDS 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
SUDAN 2 H AHEAD OF 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
TAIWAN 8 H AHEAD OF UTC
TANZANIA 3 H AHEAD OF UTC
THAILAND 7 H AHEAD OF UTC
TOGO ON 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
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
VENEZUELA 4 H BEHIND UTC
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

326
commands/zoneinfo/usno1995 Normal file
View file

@ -0,0 +1,326 @@
# @(#)usno1995 7.5
#
# From Arthur David Olson (1995-12-21):
#
# Here's time zone information from the United States Naval Observatory
# via http://tycho.usno.navy.mil/tzones.html. See USNO's note at the end.
World Time Zones
For selected countries, the local standard time offset from UTC is given,
with daylight savings time where observed.
Time: Thu Dec 21 17:43:00 utc 1995
Afghanistan: +4.5 hours
Albania: +1 hours (Local summer +2 hours)
Algeria: +1 hours (Local summer +2 hours)
American Samoa: -11 hours
Andorra: +1 hours (Local summer +2 hours)
Angola: +1 hours
Anguilla: -4 hours
Antarctica: -2 hours (Local summer -3 hours)
Antigua: -4 hours
Argentina: -3 hours
Argentina western prov: -4 hours
Armenia: +4 hours (Local summer +5 hours)
Aruba: -4 hours
Ascension: 0 hours
Australia Northern Territory: +9.5 hours
Australia Lord Howe Island: +10.5 hours (Local summer +11 hours)
Australia New South Wales: +10 hours (Local summer +11 hours)
Australia Queensland: +10 hours
Australia Victoria: +10 hours (Local summer +11 hours)
Australia Australian Captial Territory: +10 hours (Local summer +11 hours)
Australia South: +9.5 hours (Local summer +10.5 hours)
Australia Tasmania: +10 hours (Local summer +11 hours)
Australia Western: +8 hours
Austria: +1 hours (Local summer +2 hours)
Azerbajian: +3 hours
Azores: -1 hours (Local summer 0 hours)
Bahamas: -5 hours (Local summer -4 hours)
Bahrain: +3 hours
Balearic Islands: +1 hours (Local summer +2 hours)
Bangladesh: +6 hours
Barbados: -4 hours
Belarus: +2 hours (Local summer +3 hours)
Belgium: +1 hours (Local summer +2 hours)
Belize: -6 hours
Benin: +1 hours
Bermuda: -4 hours (Local summer -3 hours)
Bhutan: +6 hours
Bolivia: -4 hours
Bonaire: -4 hours
Bosnia Hercegovina: +1 hours (Local summer +2 hours)
Botswana: +2 hours
Brazil Acre: -4 hours (Local summer -5 hours)
Brazil Atlantic Islands: -1 hours (Local summer -2 hours)
Brazil East: -3 hours (Local summer -1 hours)
Brazil West: -4 hours (Local summer -3 hours)
British Virgin Islands: -4 hours
Brunei: +8 hours
Bulgaria: +2 hours (Local summer +3 hours)
Burkina Faso: 0 hours
Burundi: +2 hours
Cambodia: +7 hours
Cameroon: +1 hours
Canada Central: -6 hours (Local summer -5 hours)
Canada Eastern: -5 hours (Local summer -4 hours)
Canada Mountain: -7 hours (Local summer -6 hours)
Canada Yukon & Pacific: -8 hours (Local summer -7 hours)
Canada Atlantic: -4 hours (Local summer -3 hours)
Canada Newfoundland: -3.5 hours (Local summer -2.5 hours)
Canary Islands: 0 hours (Local summer +1 hours)
Canton Enderbury Islands: -11 hours
Cape Verde: -1 hours
Caroline Island: +11 hours
Cayman Islands: -5 hours
Central African Rep: +1 hours
Chad: +1 hours
Channel Islands: 0 hours (Local summer +1 hours)
Chatham Island: +12.75 hours (Local summer +13.75 hours)
Chile: -4 hours (Local summer -3 hours)
China People's Rep: +8 hours
Christmas Islands: -10 hours
Cocos (Keeling) Islands: ( hours (Local summer ) hours)
Colombia: -5 hours
Congo: +1 hours
Cook Islands: -10 hours
Costa Rica: -6 hours
Cote d'Ivoire: 0 hours
Croatia: +1 hours (Local summer +2 hours)
Cuba: -5 hours (Local summer -4 hours)
Curacao: -4 hours
Cyprus: +2 hours (Local summer +3 hours)
Czech Republic: +1 hours (Local summer +2 hours)
Dahomey: +1 hours
Denmark: +1 hours (Local summer +2 hours)
Djibouti: +3 hours
Dominica: -4 hours
Dominican Republic: -4 hours
Easter Island: -6 hours (Local summer -5 hours)
Ecuador: -5 hours
Egypt: +2 hours (Local summer +3 hours)
El Salvador: -6 hours
England: 0 hours (Local summer +1 hours)
Equitorial Guinea: +1 hours
Eritrea: +3 hours
Estonia: +2 hours (Local summer +3 hours)
Ethiopia: +3 hours
Falkland Islands: -4 hours (Local summer -3 hours)
Faroe Island: 0 hours (Local summer +1 hours)
Fiji: +12 hours
Finland: +2 hours (Local summer +3 hours)
France: +1 hours (Local summer +2 hours)
French Guiana: -3 hours
French Polynesia: -10 hours
Gabon: +1 hours
Galapagos Islands: -6 hours
Gambia: 0 hours
Gambier Island: -9 hours
Georgia: +4 hours
Germany: +1 hours (Local summer +2 hours)
Ghana: 0 hours
Gibraltar: +1 hours (Local summer +2 hours)
Greece: +2 hours (Local summer +3 hours)
Greenland: -3 hours (Local summer -2 hours)
Greenland Thule: -4 hours (Local summer -3 hours)
Greenland Scoresbysun: -1 hours (Local summer 0 hours)
Grenada: -4 hours
Grenadines: -4 hours
Guadeloupe: -4 hours
Guam: +10 hours
Guatemala: -6 hours
Guinea: 0 hours
Guinea Bissau: - hours (Local summer 0 hours)
Guyana: -3 hours
Haiti: -5 hours (Local summer -4 hours)
Honduras: -6 hours
Hong kong: +8 hours
Hungary: +1 hours (Local summer +2 hours)
Iceland: 0 hours
India: +5.5 hours
Indonesia Central: +8 hours
Indonesia East: +9 hours
Indonesia West: +7 hours
Iran: +3.5 hours
Iraq: +3 hours (Local summer +4 hours)
Ireland Republic of: 0 hours (Local summer +1 hours)
Israel: +2 hours (Local summer +3 hours)
Italy: +1 hours (Local summer +2 hours)
Jamaica: -5 hours
Japan: +9 hours
Johnston Island: -10 hours
Jordan: +2 hours (Local summer +3 hours)
Kazakhstan: +6 hours (Local summer +7 hours)
Kenya: +3 hours
Kiribati: +12 hours
Korea Dem Republic of: +9 hours
Korea Republic of: +9 hours
Kusaie: +12 hours
Kuwait: +3 hours
Kwajalein: -12 hours
Kyrgyzstan: +5 hours (Local summer +6 hours)
Laos: +7 hours
Latvia: +2 hours (Local summer +3 hours)
Lebanon: +2 hours (Local summer +3 hours)
Leeward Islands: -4 hours
Lesotho: +2 hours
Liberia: 0 hours
Libya: +2 hours
Lithuania: +2 hours (Local summer +3 hours)
Luxembourg: +1 hours (Local summer +2 hours)
Macedonia: +1 hours (Local summer +2 hours)
Madagascar: +3 hours
Madeira: 0 hours (Local summer +1 hours)
Malawi: +2 hours
Malaysia: +8 hours
Maldives: +5 hours
Mali: 0 hours
Mallorca Islands: +1 hours (Local summer +2 hours)
Malta: +1 hours (Local summer +2 hours)
Mariana Island: +10 hours
Marquesas Islands: -9.5 hours
Marshall Islands: +12 hours
Martinique: -4 hours
Mauritania: 0 hours
Mauritius: +4 hours
Mayotte: +3 hours
Melilla: +1 hours (Local summer +2 hours)
Mexico: -6 hours
Mexico Baja Calif Norte: -8 hours (Local summer -7 hours)
Mexico Nayarit: -7 hours
Mexico Sinaloa: -7 hours
Mexico Sonora: -7 hours
Midway Island: -11 hours
Moldova: +2 hours (Local summer +3 hours)
Moldovian Rep Pridnestrovye: +2 hours (Local summer +3 hours)
Monaco: +1 hours (Local summer +2 hours)
Mongolia: +8 hours
Morocco: 0 hours
Mozambique: +2 hours
Myanmar: +6.5 hours
Namibia: +1 hours (Local summer +2 hours)
Nauru Republic of: +12 hours
Nepal: +5.75 hours
Netherlands: +1 hours (Local summer +2 hours)
Netherlands Antilles: -4 hours
Nevis Montserrat: -4 hours
New Caledonia: +11 hours
New Hebrides: +11 hours
New Zealand: +12 hours (Local summer +13 hours)
Nicaragua: -6 hours (Local summer -5 hours)
Niger: +1 hours
Nigeria: +1 hours
Niue Island: -11 hours
Norfolk Island: +11.5 hours
Northern Ireland: 0 hours (Local summer +1 hours)
Northern Mariana Islands: +10 hours
Norway: +1 hours (Local summer +2 hours)
Oman: +4 hours
Pakistan: +5 hours
Palau: +9 hours
Panama: -5 hours
Papua New Guinea: +10 hours
Paraguay: -4 hours (Local summer -3 hours)
Peru: -5 hours
Philippines: +8 hours
Pingelap: +12 hours
Poland: +1 hours (Local summer +2 hours)
Ponape Island: +11 hours
Portugal: +1 hours (Local summer +2 hours)
Principe Island: 0 hours
Puerto Rico: -4 hours
Qatar: +3 hours
Reunion: +4 hours
Romania: +2 hours (Local summer +3 hours)
Russian Federation zone eight: +9 hours (Local summer +10 hours)
Russian Federation zone eleven: +12 hours (Local summer +13 hours)
Russian Federation zone five: +6 hours (Local summer +7 hours)
Russian Federation zone four: +5 hours (Local summer +6 hours)
Russian Federation zone nine: +10 hours (Local summer +11 hours)
Russian Federation zone one: +2 hours (Local summer +3 hours)
Russian Federation zone seven: +8 hours (Local summer +9 hours)
Russian Federation zone six: +7 hours (Local summer +8 hours)
Russian Federation zone ten: +11 hours (Local summer +12 hours)
Russian Federation zone three: +4 hours (Local summer +5 hours)
Russian Federation zone two: +4 hours (Local summer +5 hours)
Rwanda: +2 hours
Saba: -4 hours
Samoa: -11 hours
San Marino: +1 hours (Local summer +2 hours)
Sao Tome e Principe: 0 hours
Saudi Arabia: +3 hours
Scotland: 0 hours
Senegal: 0 hours
Seychelles: +4 hours
Sierra Leone: 0 hours
Singapore: +8 hours
Slovakia: +1 hours (Local summer +2 hours)
Slovenia: +1 hours (Local summer +2 hours)
Society Island: -10 hours
Solomon Islands: +11 hours
Somalia: +3 hours
South Africa: +2 hours
Spain: +1 hours (Local summer +2 hours)
Sri Lanka: +5.5 hours
St Christopher: -4 hours
St Croix: -4 hours
St Helena: 0 hours
St John: -4 hours
St Kitts Nevis: -4 hours
St Lucia: -4 hours
St Maarten: -4 hours
St Pierre & Miquelon: -3 hours (Local summer -2 hours)
St Thomas: -4 hours
St Vincent: -4 hours
Sudan: +2 hours
Suriname: -3 hours
Swaziland: +2 hours
Sweden: +1 hours (Local summer +2 hours)
Switzerland: +1 hours (Local summer +2 hours)
Syria: +2 hours (Local summer +3 hours)
Tahiti: -10 hours
Taiwan: +8 hours
Tajikistan: +6 hours
Tanzania: +3 hours
Thailand: +7 hours
Togo: 0 hours
Tonga: +13 hours
Trinidad and Tobago: -4 hours
Tuamotu Island: -10 hours
Tubuai Island: -10 hours
Tunisia: +1 hours
Turkey: +2 hours (Local summer +3 hours)
Turkmenistan: +5 hours
Turks and Caicos Islands: -5 hours (Local summer -4 hours)
Tuvalu: +12 hours
Uganda: +3 hours
Ukraine: +2 hours (Local summer +3 hours)
United Arab Emirates: +4 hours
United Kingdom: 0 hours (Local summer +1 hours)
USA Central: -6 hours (Local summer -5 hours)
USA Eastern: -5 hours (Local summer -4 hours)
USA Mountain: -7 hours (Local summer -6 hours)
USA Arizona: -7 hours
USA Indiana East: -5 hours
USA Pacific: -8 hours (Local summer -7 hours)
USA Alaska: -9 hours (Local summer -8 hours)
USA Hawaii Aleutian: - hours (Local summer -10 hours)
Uruguay: -3 hours
Uzbekistan: +5 hours
Vanuatu: +11 hours (Local summer +12 hours)
Vatican City: +1 hours (Local summer +2 hours)
Venezuela: -4 hours
Vietnam: +7 hours
Virgin Islands: -4 hours
Wake Island: +12 hours
Wales: 0 hours (Local summer +1 hours)
Wallis and Futuna Islands: +12 hours
Windward Islands: -4 hours
Yemen: +3 hours
Yugoslavia: +1 hours (Local summer +2 hours)
Zaire Kasai: +2 hours
Zaire Kinshasa Mbandaka: +1 hours
Zaire Haut Zaire: +2 hours
Zaire Kivu: +2 hours
Zaire Shaba: +2 hours
Zambia: +2 hours
Zimbabwe: +2 hours
All timezone information is non-authoritative...

327
commands/zoneinfo/usno1997 Normal file
View file

@ -0,0 +1,327 @@
# @(#)usno1997 7.7
#
# From Arthur David Olson (1997-03-07):
#
# Here's time zone information from the United States Naval Observatory
# via http://tycho.usno.navy.mil/tzones.html. See USNO's note at the end.
Unofficial Time Zone Information
World Time Zones
For selected countries, the local standard time offset from UTC is given, with daylight savings time where observed.
Time: Fri Mar 7 22:38:58 UTC 1997
Afghanistan: +4.5 hours
Albania: +1 hours (Local summer +2 hours)
Algeria: +1 hours (Local summer +2 hours)
American Samoa: -11 hours
Andorra: +1 hours (Local summer +2 hours)
Angola: +1 hours
Anguilla: -4 hours
Antarctica: -2 hours (Local summer -3 hours)
Antigua: -4 hours
Argentina: -3 hours
Argentina western prov: -4 hours
Armenia: +4 hours (Local summer +5 hours)
Aruba: -4 hours
Ascension: 0 hours
Australia Northern Territory: +9.5 hours
Australia Lord Howe Island: +10.5 hours (Local summer +11 hours)
Australia New South Wales: +10 hours (Local summer +11 hours)
Australia Queensland: +10 hours
Australia Victoria: +10 hours (Local summer +11 hours)
Australia Australian Captial Territory: +10 hours (Local summer +11 hours)
Australia South: +9.5 hours (Local summer +10.5 hours)
Australia Tasmania: +10 hours (Local summer +11 hours)
Australia Western: +8 hours
Austria: +1 hours (Local summer +2 hours)
Azerbajian: +3 hours
Azores: -1 hours (Local summer 0 hours)
Bahamas: -5 hours (Local summer -4 hours)
Bahrain: +3 hours
Balearic Islands: +1 hours (Local summer +2 hours)
Bangladesh: +6 hours
Barbados: -4 hours
Belarus: +2 hours (Local summer +3 hours)
Belgium: +1 hours (Local summer +2 hours)
Belize: -6 hours
Benin: +1 hours
Bermuda: -4 hours (Local summer -3 hours)
Bhutan: +6 hours
Bolivia: -4 hours
Bonaire: -4 hours
Bosnia Hercegovina: +1 hours (Local summer +2 hours)
Botswana: +2 hours
Brazil Acre: -4 hours (Local summer -5 hours)
Brazil Atlantic Islands: -1 hours (Local summer -2 hours)
Brazil East: -3 hours (Local summer -1 hours)
Brazil West: -4 hours (Local summer -3 hours)
British Virgin Islands: -4 hours
Brunei: +8 hours
Bulgaria: +2 hours (Local summer +3 hours)
Burkina Faso: 0 hours
Burundi: +2 hours
Cambodia: +7 hours
Cameroon: +1 hours
Canada Central: -6 hours (Local summer -5 hours)
Canada Eastern: -5 hours (Local summer -4 hours)
Canada Mountain: -7 hours (Local summer -6 hours)
Canada Yukon & Pacific: -8 hours (Local summer -7 hours)
Canada Atlantic: -4 hours (Local summer -3 hours)
Canada Newfoundland: -3.5 hours (Local summer -2.5 hours)
Canary Islands: 0 hours (Local summer +1 hours)
Canton Enderbury Islands: -11 hours
Cape Verde: -1 hours
Caroline Island: +11 hours
Cayman Islands: -5 hours
Central African Rep: +1 hours
Chad: +1 hours
Channel Islands: 0 hours (Local summer +1 hours)
Chatham Island: +12.75 hours (Local summer +13.75 hours)
Chile: -4 hours (Local summer -3 hours)
China People's Rep: +8 hours
Christmas Islands: -10 hours
Cocos (Keeling) Islands: ( hours (Local summer ) hours)
Colombia: -5 hours
Congo: +1 hours
Cook Islands: -10 hours
Costa Rica: -6 hours
Cote d'Ivoire: 0 hours
Croatia: +1 hours (Local summer +2 hours)
Cuba: -5 hours (Local summer -4 hours)
Curacao: -4 hours
Cyprus: +2 hours (Local summer +3 hours)
Czech Republic: +1 hours (Local summer +2 hours)
Dahomey: +1 hours
Denmark: +1 hours (Local summer +2 hours)
Djibouti: +3 hours
Dominica: -4 hours
Dominican Republic: -4 hours
Easter Island: -6 hours (Local summer -5 hours)
Ecuador: -5 hours
Egypt: +2 hours (Local summer +3 hours)
El Salvador: -6 hours
England: 0 hours (Local summer +1 hours)
Equitorial Guinea: +1 hours
Eritrea: +3 hours
Estonia: +2 hours (Local summer +3 hours)
Ethiopia: +3 hours
Falkland Islands: -4 hours (Local summer -3 hours)
Faroe Island: 0 hours (Local summer +1 hours)
Fiji: +12 hours
Finland: +2 hours (Local summer +3 hours)
France: +1 hours (Local summer +2 hours)
French Guiana: -3 hours
French Polynesia: -10 hours
Gabon: +1 hours
Galapagos Islands: -5 hours
Gambia: 0 hours
Gambier Island: -9 hours
Georgia: +4 hours
Germany: +1 hours (Local summer +2 hours)
Ghana: 0 hours
Gibraltar: +1 hours (Local summer +2 hours)
Greece: +2 hours (Local summer +3 hours)
Greenland: -3 hours (Local summer -2 hours)
Greenland Thule: -4 hours (Local summer -3 hours)
Greenland Scoresbysun: -1 hours (Local summer 0 hours)
Grenada: -4 hours
Grenadines: -4 hours
Guadeloupe: -4 hours
Guam: +10 hours
Guatemala: -6 hours
Guinea: 0 hours
Guinea Bissau: - hours (Local summer 0 hours)
Guyana: -3 hours
Haiti: -5 hours (Local summer -4 hours)
Honduras: -6 hours
Hong kong: +8 hours
Hungary: +1 hours (Local summer +2 hours)
Iceland: 0 hours
India: +5.5 hours
Indonesia Central: +8 hours
Indonesia East: +9 hours
Indonesia West: +7 hours
Iran: +3.5 hours
Iraq: +3 hours (Local summer +4 hours)
Ireland Republic of: 0 hours (Local summer +1 hours)
Israel: +2 hours (Local summer +3 hours)
Italy: +1 hours (Local summer +2 hours)
Jamaica: -5 hours
Japan: +9 hours
Johnston Island: -10 hours
Jordan: +2 hours (Local summer +3 hours)
Kazakhstan: +6 hours (Local summer +7 hours)
Kenya: +3 hours
Kiribati: +12 hours
Korea Dem Republic of: +9 hours
Korea Republic of: +9 hours
Kusaie: +12 hours
Kuwait: +3 hours
Kwajalein: -12 hours
Kyrgyzstan: +5 hours (Local summer +6 hours)
Laos: +7 hours
Latvia: +2 hours (Local summer +3 hours)
Lebanon: +2 hours (Local summer +3 hours)
Leeward Islands: -4 hours
Lesotho: +2 hours
Liberia: 0 hours
Libya: +2 hours
Lithuania: +2 hours (Local summer +3 hours)
Luxembourg: +1 hours (Local summer +2 hours)
Macedonia: +1 hours (Local summer +2 hours)
Madagascar: +3 hours
Madeira: 0 hours (Local summer +1 hours)
Malawi: +2 hours
Malaysia: +8 hours
Maldives: +5 hours
Mali: 0 hours
Mallorca Islands: +1 hours (Local summer +2 hours)
Malta: +1 hours (Local summer +2 hours)
Mariana Island: +10 hours
Marquesas Islands: -9.5 hours
Marshall Islands: +12 hours
Martinique: -4 hours
Mauritania: 0 hours
Mauritius: +4 hours
Mayotte: +3 hours
Melilla: +1 hours (Local summer +2 hours)
Mexico: -6 hours
Mexico Baja Calif Norte: -8 hours (Local summer -7 hours)
Mexico Nayarit: -7 hours
Mexico Sinaloa: -7 hours
Mexico Sonora: -7 hours
Midway Island: -11 hours
Moldova: +2 hours (Local summer +3 hours)
Moldovian Rep Pridnestrovye: +2 hours (Local summer +3 hours)
Monaco: +1 hours (Local summer +2 hours)
Mongolia: +8 hours
Morocco: 0 hours
Mozambique: +2 hours
Myanmar: +6.5 hours
Namibia: +1 hours (Local summer +2 hours)
Nauru Republic of: +12 hours
Nepal: +5.75 hours
Netherlands: +1 hours (Local summer +2 hours)
Netherlands Antilles: -4 hours
Nevis Montserrat: -4 hours
New Caledonia: +11 hours
New Hebrides: +11 hours
New Zealand: +12 hours (Local summer +13 hours)
Nicaragua: -6 hours (Local summer -5 hours)
Niger: +1 hours
Nigeria: +1 hours
Niue Island: -11 hours
Norfolk Island: +11.5 hours
Northern Ireland: 0 hours (Local summer +1 hours)
Northern Mariana Islands: +10 hours
Norway: +1 hours (Local summer +2 hours)
Oman: +4 hours
Pakistan: +5 hours
Palau: +9 hours
Panama: -5 hours
Papua New Guinea: +10 hours
Paraguay: -4 hours (Local summer -3 hours)
Peru: -5 hours
Philippines: +8 hours
Pingelap: +12 hours
Poland: +1 hours (Local summer +2 hours)
Ponape Island: +11 hours
Portugal: +1 hours (Local summer +2 hours)
Principe Island: 0 hours
Puerto Rico: -4 hours
Qatar: +3 hours
Reunion: +4 hours
Romania: +2 hours (Local summer +3 hours)
Russian Federation zone eight: +9 hours (Local summer +10 hours)
Russian Federation zone eleven: +12 hours (Local summer +13 hours)
Russian Federation zone five: +6 hours (Local summer +7 hours)
Russian Federation zone four: +5 hours (Local summer +6 hours)
Russian Federation zone nine: +10 hours (Local summer +11 hours)
Russian Federation zone one: +2 hours (Local summer +3 hours)
Russian Federation zone seven: +8 hours (Local summer +9 hours)
Russian Federation zone six: +7 hours (Local summer +8 hours)
Russian Federation zone ten: +11 hours (Local summer +12 hours)
Russian Federation zone three: +4 hours (Local summer +5 hours)
Russian Federation zone two: +4 hours (Local summer +5 hours)
Rwanda: +2 hours
Saba: -4 hours
Samoa: -11 hours
San Marino: +1 hours (Local summer +2 hours)
Sao Tome e Principe: 0 hours
Saudi Arabia: +3 hours
Scotland: 0 hours (Local summer +1 hours)
Senegal: 0 hours
Seychelles: +4 hours
Sierra Leone: 0 hours
Singapore: +8 hours
Slovakia: +1 hours (Local summer +2 hours)
Slovenia: +1 hours (Local summer +2 hours)
Society Island: -10 hours
Solomon Islands: +11 hours
Somalia: +3 hours
South Africa: +2 hours
Spain: +1 hours (Local summer +2 hours)
Sri Lanka: +5.5 hours
St Christopher: -4 hours
St Croix: -4 hours
St Helena: 0 hours
St John: -4 hours
St Kitts Nevis: -4 hours
St Lucia: -4 hours
St Maarten: -4 hours
St Pierre & Miquelon: -3 hours (Local summer -2 hours)
St Thomas: -4 hours
St Vincent: -4 hours
Sudan: +2 hours
Suriname: -3 hours
Swaziland: +2 hours
Sweden: +1 hours (Local summer +2 hours)
Switzerland: +1 hours (Local summer +2 hours)
Syria: +2 hours (Local summer +3 hours)
Tahiti: -10 hours
Taiwan: +8 hours
Tajikistan: +6 hours
Tanzania: +3 hours
Thailand: +7 hours
Togo: 0 hours
Tonga: +13 hours
Trinidad and Tobago: -4 hours
Tuamotu Island: -10 hours
Tubuai Island: -10 hours
Tunisia: +1 hours
Turkey: +2 hours (Local summer +3 hours)
Turkmenistan: +5 hours
Turks and Caicos Islands: -5 hours (Local summer -4 hours)
Tuvalu: +12 hours
Uganda: +3 hours
Ukraine: +2 hours (Local summer +3 hours)
United Arab Emirates: +4 hours
United Kingdom: 0 hours (Local summer +1 hours)
USA Central: -6 hours (Local summer -5 hours)
USA Eastern: -5 hours (Local summer -4 hours)
USA Mountain: -7 hours (Local summer -6 hours)
USA Arizona: -7 hours
USA Indiana East: -5 hours
USA Pacific: -8 hours (Local summer -7 hours)
USA Alaska: -9 hours (Local summer -8 hours)
USA Aleutian: -10 hours
USA Hawaii: -10 hours
Uruguay: -3 hours
Uzbekistan: +5 hours
Vanuatu: +11 hours (Local summer +12 hours)
Vatican City: +1 hours (Local summer +2 hours)
Venezuela: -4 hours
Vietnam: +7 hours
Virgin Islands: -4 hours
Wake Island: +12 hours
Wales: 0 hours (Local summer +1 hours)
Wallis and Futuna Islands: +12 hours
Windward Islands: -4 hours
Yemen: +3 hours
Yugoslavia: +1 hours (Local summer +2 hours)
Zaire Kasai: +2 hours
Zaire Kinshasa Mbandaka: +1 hours
Zaire Haut Zaire: +2 hours
Zaire Kivu: +2 hours
Zaire Shaba: +2 hours
Zambia: +2 hours
Zimbabwe: +2 hours
All timezone information is non-authoritative...

327
commands/zoneinfo/usno1998 Normal file
View file

@ -0,0 +1,327 @@
# @(#)usno1998 7.4
#
# From Arthur David Olson (1998-05-26):
#
# Here's time zone information from the United States Naval Observatory
# via http://tycho.usno.navy.mil/tzones.html. See USNO's note at the end.
Unofficial Time Zone Information
World Time Zones
For selected countries, the local standard time offset from UTC is given, with daylight savings time where observed.
Time: Mon May 25 21:14:24 UTC 1998
Afghanistan: +4.5 hours
Albania: +1 hours (Local summer +2 hours)
Algeria: +1 hours (Local summer +2 hours)
American Samoa: -11 hours
Andorra: +1 hours (Local summer +2 hours)
Angola: +1 hours
Anguilla: -4 hours
Antarctica: -2 hours (Local summer -3 hours)
Antigua: -4 hours
Argentina: -3 hours
Argentina western prov: -4 hours
Armenia: +4 hours (Local summer +5 hours)
Aruba: -4 hours
Ascension: 0 hours
Australia Northern Territory: +9.5 hours
Australia Lord Howe Island: +10.5 hours (Local summer +11 hours)
Australia New South Wales: +10 hours (Local summer +11 hours)
Australia Queensland: +10 hours
Australia Victoria: +10 hours (Local summer +11 hours)
Australia Australian Captial Territory: +10 hours (Local summer +11 hours)
Australia South: +9.5 hours (Local summer +10.5 hours)
Australia Tasmania: +10 hours (Local summer +11 hours)
Australia Western: +8 hours
Austria: +1 hours (Local summer +2 hours)
Azerbajian: +3 hours
Azores: -1 hours (Local summer 0 hours)
Bahamas: -5 hours (Local summer -4 hours)
Bahrain: +3 hours
Balearic Islands: +1 hours (Local summer +2 hours)
Bangladesh: +6 hours
Barbados: -4 hours
Belarus: +2 hours (Local summer +3 hours)
Belgium: +1 hours (Local summer +2 hours)
Belize: -6 hours
Benin: +1 hours
Bermuda: -4 hours (Local summer -3 hours)
Bhutan: +6 hours
Bolivia: -4 hours
Bonaire: -4 hours
Bosnia Hercegovina: +1 hours (Local summer +2 hours)
Botswana: +2 hours
Brazil Acre: -4 hours (Local summer -5 hours)
Brazil Atlantic Islands: -1 hours (Local summer -2 hours)
Brazil East: -3 hours (Local summer -1 hours)
Brazil West: -4 hours (Local summer -3 hours)
British Virgin Islands: -4 hours
Brunei: +8 hours
Bulgaria: +2 hours (Local summer +3 hours)
Burkina Faso: 0 hours
Burundi: +2 hours
Cambodia: +7 hours
Cameroon: +1 hours
Canada Central: -6 hours (Local summer -5 hours)
Canada Eastern: -5 hours (Local summer -4 hours)
Canada Mountain: -7 hours (Local summer -6 hours)
Canada Yukon & Pacific: -8 hours (Local summer -7 hours)
Canada Atlantic: -4 hours (Local summer -3 hours)
Canada Newfoundland: -3.5 hours (Local summer -2.5 hours)
Canary Islands: 0 hours (Local summer +1 hours)
Canton Enderbury Islands: -11 hours
Cape Verde: -1 hours
Caroline Island: +11 hours
Cayman Islands: -5 hours
Central African Rep: +1 hours
Chad: +1 hours
Channel Islands: 0 hours (Local summer +1 hours)
Chatham Island: +12.75 hours (Local summer +13.75 hours)
Chile: -4 hours (Local summer -3 hours)
China People's Rep: +8 hours
Christmas Islands: -10 hours
Cocos (Keeling) Islands: ( hours (Local summer ) hours)
Colombia: -5 hours
Congo: +1 hours
Cook Islands: -10 hours
Costa Rica: -6 hours
Cote d'Ivoire: 0 hours
Croatia: +1 hours (Local summer +2 hours)
Cuba: -5 hours (Local summer -4 hours)
Curacao: -4 hours
Cyprus: +2 hours (Local summer +3 hours)
Czech Republic: +1 hours (Local summer +2 hours)
Dahomey: +1 hours
Denmark: +1 hours (Local summer +2 hours)
Djibouti: +3 hours
Dominica: -4 hours
Dominican Republic: -4 hours
Easter Island: -6 hours (Local summer -5 hours)
Ecuador: -5 hours
Egypt: +2 hours (Local summer +3 hours)
El Salvador: -6 hours
England: 0 hours (Local summer +1 hours)
Equitorial Guinea: +1 hours
Eritrea: +3 hours
Estonia: +2 hours (Local summer +3 hours)
Ethiopia: +3 hours
Falkland Islands: -4 hours (Local summer -3 hours)
Faroe Island: 0 hours (Local summer +1 hours)
Fiji: +12 hours
Finland: +2 hours (Local summer +3 hours)
France: +1 hours (Local summer +2 hours)
French Guiana: -3 hours
French Polynesia: -10 hours
Gabon: +1 hours
Galapagos Islands: -5 hours
Gambia: 0 hours
Gambier Island: -9 hours
Georgia: +4 hours
Germany: +1 hours (Local summer +2 hours)
Ghana: 0 hours
Gibraltar: +1 hours (Local summer +2 hours)
Greece: +2 hours (Local summer +3 hours)
Greenland: -3 hours (Local summer -2 hours)
Greenland Thule: -4 hours (Local summer -3 hours)
Greenland Scoresbysun: -1 hours (Local summer 0 hours)
Grenada: -4 hours
Grenadines: -4 hours
Guadeloupe: -4 hours
Guam: +10 hours
Guatemala: -6 hours
Guinea: 0 hours
Guinea Bissau: - hours (Local summer 0 hours)
Guyana: -3 hours
Haiti: -5 hours (Local summer -4 hours)
Honduras: -6 hours
Hong kong: +8 hours
Hungary: +1 hours (Local summer +2 hours)
Iceland: 0 hours
India: +5.5 hours
Indonesia Central: +8 hours
Indonesia East: +9 hours
Indonesia West: +7 hours
Iran: +3.5 hours
Iraq: +3 hours (Local summer +4 hours)
Ireland Republic of: 0 hours (Local summer +1 hours)
Israel: +2 hours (Local summer +3 hours)
Italy: +1 hours (Local summer +2 hours)
Jamaica: -5 hours
Japan: +9 hours
Johnston Island: -10 hours
Jordan: +2 hours (Local summer +3 hours)
Kazakhstan: +6 hours (Local summer +7 hours)
Kenya: +3 hours
Kiribati: +12 hours
Korea Dem Republic of: +9 hours
Korea Republic of: +9 hours
Kusaie: +12 hours
Kuwait: +3 hours
Kwajalein: -12 hours
Kyrgyzstan: +5 hours (Local summer +6 hours)
Laos: +7 hours
Latvia: +2 hours (Local summer +3 hours)
Lebanon: +2 hours (Local summer +3 hours)
Leeward Islands: -4 hours
Lesotho: +2 hours
Liberia: 0 hours
Libya: +2 hours
Lithuania: +2 hours (Local summer +3 hours)
Luxembourg: +1 hours (Local summer +2 hours)
Macedonia: +1 hours (Local summer +2 hours)
Madagascar: +3 hours
Madeira: 0 hours (Local summer +1 hours)
Malawi: +2 hours
Malaysia: +8 hours
Maldives: +5 hours
Mali: 0 hours
Mallorca Islands: +1 hours (Local summer +2 hours)
Malta: +1 hours (Local summer +2 hours)
Mariana Island: +10 hours
Marquesas Islands: -9.5 hours
Marshall Islands: +12 hours
Martinique: -4 hours
Mauritania: 0 hours
Mauritius: +4 hours
Mayotte: +3 hours
Melilla: +1 hours (Local summer +2 hours)
Mexico: -6 hours
Mexico Baja Calif Norte: -8 hours (Local summer -7 hours)
Mexico Nayarit: -7 hours
Mexico Sinaloa: -7 hours
Mexico Sonora: -7 hours
Midway Island: -11 hours
Moldova: +2 hours (Local summer +3 hours)
Moldovian Rep Pridnestrovye: +2 hours (Local summer +3 hours)
Monaco: +1 hours (Local summer +2 hours)
Mongolia: +8 hours
Morocco: 0 hours
Mozambique: +2 hours
Myanmar: +6.5 hours
Namibia: +1 hours (Local summer +2 hours)
Nauru Republic of: +12 hours
Nepal: +5.75 hours
Netherlands: +1 hours (Local summer +2 hours)
Netherlands Antilles: -4 hours
Nevis Montserrat: -4 hours
New Caledonia: +11 hours
New Hebrides: +11 hours
New Zealand: +12 hours (Local summer +13 hours)
Nicaragua: -6 hours (Local summer -5 hours)
Niger: +1 hours
Nigeria: +1 hours
Niue Island: -11 hours
Norfolk Island: +11.5 hours
Northern Ireland: 0 hours (Local summer +1 hours)
Northern Mariana Islands: +10 hours
Norway: +1 hours (Local summer +2 hours)
Oman: +4 hours
Pakistan: +5 hours
Palau: +9 hours
Panama: -5 hours
Papua New Guinea: +10 hours
Paraguay: -4 hours (Local summer -3 hours)
Peru: -5 hours
Philippines: +8 hours
Pingelap: +12 hours
Poland: +1 hours (Local summer +2 hours)
Ponape Island: +11 hours
Portugal: +1 hours (Local summer +2 hours)
Principe Island: 0 hours
Puerto Rico: -4 hours
Qatar: +3 hours
Reunion: +4 hours
Romania: +2 hours (Local summer +3 hours)
Russian Federation zone eight: +9 hours (Local summer +10 hours)
Russian Federation zone eleven: +12 hours (Local summer +13 hours)
Russian Federation zone five: +6 hours (Local summer +7 hours)
Russian Federation zone four: +5 hours (Local summer +6 hours)
Russian Federation zone nine: +10 hours (Local summer +11 hours)
Russian Federation zone one: +2 hours (Local summer +3 hours)
Russian Federation zone seven: +8 hours (Local summer +9 hours)
Russian Federation zone six: +7 hours (Local summer +8 hours)
Russian Federation zone ten: +11 hours (Local summer +12 hours)
Russian Federation zone three: +4 hours (Local summer +5 hours)
Russian Federation zone two: +4 hours (Local summer +5 hours)
Rwanda: +2 hours
Saba: -4 hours
Samoa: -11 hours
San Marino: +1 hours (Local summer +2 hours)
Sao Tome e Principe: 0 hours
Saudi Arabia: +3 hours
Scotland: 0 hours (Local summer +1 hours)
Senegal: 0 hours
Seychelles: +4 hours
Sierra Leone: 0 hours
Singapore: +8 hours
Slovakia: +1 hours (Local summer +2 hours)
Slovenia: +1 hours (Local summer +2 hours)
Society Island: -10 hours
Solomon Islands: +11 hours
Somalia: +3 hours
South Africa: +2 hours
Spain: +1 hours (Local summer +2 hours)
Sri Lanka: +5.5 hours
St Christopher: -4 hours
St Croix: -4 hours
St Helena: 0 hours
St John: -4 hours
St Kitts Nevis: -4 hours
St Lucia: -4 hours
St Maarten: -4 hours
St Pierre & Miquelon: -3 hours (Local summer -2 hours)
St Thomas: -4 hours
St Vincent: -4 hours
Sudan: +2 hours
Suriname: -3 hours
Swaziland: +2 hours
Sweden: +1 hours (Local summer +2 hours)
Switzerland: +1 hours (Local summer +2 hours)
Syria: +2 hours (Local summer +3 hours)
Tahiti: -10 hours
Taiwan: +8 hours
Tajikistan: +6 hours
Tanzania: +3 hours
Thailand: +7 hours
Togo: 0 hours
Tonga: +13 hours
Trinidad and Tobago: -4 hours
Tuamotu Island: -10 hours
Tubuai Island: -10 hours
Tunisia: +1 hours
Turkey: +2 hours (Local summer +3 hours)
Turkmenistan: +5 hours
Turks and Caicos Islands: -5 hours (Local summer -4 hours)
Tuvalu: +12 hours
Uganda: +3 hours
Ukraine: +2 hours (Local summer +3 hours)
United Arab Emirates: +4 hours
United Kingdom: 0 hours (Local summer +1 hours)
USA Central: -6 hours (Local summer -5 hours)
USA Eastern: -5 hours (Local summer -4 hours)
USA Mountain: -7 hours (Local summer -6 hours)
USA Arizona: -7 hours
USA Indiana East: -5 hours
USA Pacific: -8 hours (Local summer -7 hours)
USA Alaska: -9 hours (Local summer -8 hours)
USA Aleutian: -10 hours
USA Hawaii: -10 hours
Uruguay: -3 hours
Uzbekistan: +5 hours
Vanuatu: +11 hours (Local summer +12 hours)
Vatican City: +1 hours (Local summer +2 hours)
Venezuela: -4 hours
Vietnam: +7 hours
Virgin Islands: -4 hours
Wake Island: +12 hours
Wales: 0 hours (Local summer +1 hours)
Wallis and Futuna Islands: +12 hours
Windward Islands: -4 hours
Yemen: +3 hours
Yugoslavia: +1 hours (Local summer +2 hours)
Zaire Kasai: +2 hours
Zaire Kinshasa Mbandaka: +1 hours
Zaire Haut Zaire: +2 hours
Zaire Kivu: +2 hours
Zaire Shaba: +2 hours
Zambia: +2 hours
Zimbabwe: +2 hours
All timezone information is non-authoritative...

View file

@ -0,0 +1,29 @@
#! /bin/sh
# @(#)workman.sh 1.8
# Tell groff not to emit SGR escape sequences (ANSI color escapes).
GROFF_NO_SGR=1
export GROFF_NO_SGR
echo ".am TH
.hy 0
.na
..
.rm }H
.rm }F" | nroff -man - ${1+"$@"} | perl -ne '
chomp;
s/.\010//g;
s/\s*$//;
if (/^$/) {
$sawblank = 1;
next;
} else {
if ($sawblank && $didprint) {
print "\n";
$sawblank = 0;
}
print "$_\n";
$didprint = 1;
}
'

View file

@ -0,0 +1,40 @@
#! /bin/sh
: 'This file is in the public domain, so clarified as of'
: '2006-07-17 by Arthur David Olson.'
: '@(#)yearistype.sh 8.2'
case $#-$1 in
2-|2-0*|2-*[!0-9]*)
echo "$0: wild year - $1" >&2
exit 1 ;;
esac
case $#-$2 in
2-even)
case $1 in
*[24680]) exit 0 ;;
*) exit 1 ;;
esac ;;
2-nonpres|2-nonuspres)
case $1 in
*[02468][048]|*[13579][26]) exit 1 ;;
*) exit 0 ;;
esac ;;
2-odd)
case $1 in
*[13579]) exit 0 ;;
*) exit 1 ;;
esac ;;
2-uspres)
case $1 in
*[02468][048]|*[13579][26]) exit 0 ;;
*) exit 1 ;;
esac ;;
2-*)
echo "$0: wild type - $2" >&2 ;;
esac
echo "$0: usage is $0 year even|odd|uspres|nonpres|nonuspres" >&2
exit 1

57
commands/zoneinfo/zdump.8 Normal file
View file

@ -0,0 +1,57 @@
.TH ZDUMP 8
.SH NAME
zdump \- time zone dumper
.SH SYNOPSIS
.B zdump
[
.B \-\-version
]
[
.B \-v
] [
.B \-c
[loyear,]hiyear ] [ zonename ... ]
.SH DESCRIPTION
.I Zdump
prints the current time in each
.I zonename
named on the command line.
.PP
These options are available:
.TP
.BI "\-\-version"
Output version information and exit.
.TP
.B \-v
For each
.I zonename
on the command line,
print the time at the lowest possible time value,
the time one day after the lowest possible time value,
the times both one second before and exactly at
each detected time discontinuity,
the time at one day less than the highest possible time value,
and the time at the highest possible time value,
Each line ends with
.B isdst=1
if the given time is Daylight Saving Time or
.B isdst=0
otherwise.
.TP
.BI "\-c " [loyear,]hiyear
Cut off verbose output near the start of the given year(s).
By default,
the program cuts off verbose output near the starts of the years -500 and 2500.
.SH LIMITATIONS
The
.B \-v
option may not be used on systems with floating-point time_t values
that are neither float nor double.
.PP
Time discontinuities are found by sampling the results returned by localtime
at twelve-hour intervals.
This works in all real-world cases;
one can construct artificial time zones for which this fails.
.SH "SEE ALSO"
newctime(3), tzfile(5), zic(8)
.\" @(#)zdump.8 7.7

View file

@ -0,0 +1,43 @@
NAME
zdump - time zone dumper
SYNOPSIS
zdump [ --version ] [ -v ] [ -c [loyear,]hiyear ] [ zonename
... ]
DESCRIPTION
Zdump prints the current time in each zonename named on the
command line.
These options are available:
--version
Output version information and exit.
-v For each zonename on the command line, print the time
at the lowest possible time value, the time one day
after the lowest possible time value, the times both
one second before and exactly at each detected time
discontinuity, the time at one day less than the
highest possible time value, and the time at the
highest possible time value, Each line ends with
isdst=1 if the given time is Daylight Saving Time or
isdst=0 otherwise.
-c [loyear,]hiyear
Cut off verbose output near the start of the given
year(s). By default, the program cuts off verbose
output near the starts of the years -500 and 2500.
LIMITATIONS
The -v option may not be used on systems with floating-point
time_t values that are neither float nor double.
Time discontinuities are found by sampling the results
returned by localtime at twelve-hour intervals. This works
in all real-world cases; one can construct artificial time
zones for which this fails.
SEE ALSO
newctime(3), tzfile(5), zic(8)

686
commands/zoneinfo/zdump.c Normal file
View file

@ -0,0 +1,686 @@
static char elsieid[] = "@(#)zdump.c 7.77";
/*
** This code has been made independent of the rest of the time
** conversion package to increase confidence in the verification it provides.
** You can use this code to help in verifying other implementations.
*/
#include "stdio.h" /* for stdout, stderr, perror */
#include "string.h" /* for strcpy */
#include "sys/types.h" /* for time_t */
#include "time.h" /* for struct tm */
#include "stdlib.h" /* for exit, malloc, atoi */
#include "float.h" /* for FLT_MAX and DBL_MAX */
#include "ctype.h" /* for isalpha et al. */
#ifndef isascii
#define isascii(x) 1
#endif /* !defined isascii */
#ifndef ZDUMP_LO_YEAR
#define ZDUMP_LO_YEAR (-500)
#endif /* !defined ZDUMP_LO_YEAR */
#ifndef ZDUMP_HI_YEAR
#define ZDUMP_HI_YEAR 2500
#endif /* !defined ZDUMP_HI_YEAR */
#ifndef MAX_STRING_LENGTH
#define MAX_STRING_LENGTH 1024
#endif /* !defined MAX_STRING_LENGTH */
#ifndef TRUE
#define TRUE 1
#endif /* !defined TRUE */
#ifndef FALSE
#define FALSE 0
#endif /* !defined FALSE */
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif /* !defined EXIT_SUCCESS */
#ifndef EXIT_FAILURE
#define EXIT_FAILURE 1
#endif /* !defined EXIT_FAILURE */
#ifndef SECSPERMIN
#define SECSPERMIN 60
#endif /* !defined SECSPERMIN */
#ifndef MINSPERHOUR
#define MINSPERHOUR 60
#endif /* !defined MINSPERHOUR */
#ifndef SECSPERHOUR
#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
#endif /* !defined SECSPERHOUR */
#ifndef HOURSPERDAY
#define HOURSPERDAY 24
#endif /* !defined HOURSPERDAY */
#ifndef EPOCH_YEAR
#define EPOCH_YEAR 1970
#endif /* !defined EPOCH_YEAR */
#ifndef TM_YEAR_BASE
#define TM_YEAR_BASE 1900
#endif /* !defined TM_YEAR_BASE */
#ifndef DAYSPERNYEAR
#define DAYSPERNYEAR 365
#endif /* !defined DAYSPERNYEAR */
#ifndef isleap
#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
#endif /* !defined isleap */
#ifndef isleap_sum
/*
** See tzfile.h for details on isleap_sum.
*/
#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400)
#endif /* !defined isleap_sum */
#define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY)
#define SECSPERNYEAR (SECSPERDAY * DAYSPERNYEAR)
#define SECSPERLYEAR (SECSPERNYEAR + SECSPERDAY)
#if HAVE_GETTEXT
#include "locale.h" /* for setlocale */
#include "libintl.h"
#endif /* HAVE_GETTEXT */
#ifndef GNUC_or_lint
#ifdef lint
#define GNUC_or_lint
#else /* !defined lint */
#ifdef __GNUC__
#define GNUC_or_lint
#endif /* defined __GNUC__ */
#endif /* !defined lint */
#endif /* !defined GNUC_or_lint */
#ifndef INITIALIZE
#ifdef GNUC_or_lint
#define INITIALIZE(x) ((x) = 0)
#else /* !defined GNUC_or_lint */
#define INITIALIZE(x)
#endif /* !defined GNUC_or_lint */
#endif /* !defined INITIALIZE */
/*
** For the benefit of GNU folk...
** `_(MSGID)' uses the current locale's message library string for MSGID.
** The default is to use gettext if available, and use MSGID otherwise.
*/
#ifndef _
#if HAVE_GETTEXT
#define _(msgid) gettext(msgid)
#else /* !HAVE_GETTEXT */
#define _(msgid) msgid
#endif /* !HAVE_GETTEXT */
#endif /* !defined _ */
#ifndef TZ_DOMAIN
#define TZ_DOMAIN "tz"
#endif /* !defined TZ_DOMAIN */
#ifndef P
#if __STDC__
#define P(x) x
#else /* !__STDC__ */
#define P(x) ()
#endif /* !__STDC__ */
#endif /* !defined P */
extern char ** environ;
extern int getopt P((int argc, char * const argv[],
const char * options));
extern char * optarg;
extern int optind;
extern char * tzname[2];
static time_t absolute_min_time;
static time_t absolute_max_time;
static size_t longest;
static char * progname;
static int warned;
static char * abbr P((struct tm * tmp));
static void abbrok P((const char * abbrp, const char * zone));
static long delta P((struct tm * newp, struct tm * oldp));
static void dumptime P((const struct tm * tmp));
static time_t hunt P((char * name, time_t lot, time_t hit));
static void setabsolutes P((void));
static void show P((char * zone, time_t t, int v));
static const char * tformat P((void));
static time_t yeartot P((long y));
#ifndef TYPECHECK
#define my_localtime localtime
#else /* !defined TYPECHECK */
static struct tm *
my_localtime(tp)
time_t * tp;
{
register struct tm * tmp;
tmp = localtime(tp);
if (tp != NULL && tmp != NULL) {
struct tm tm;
register time_t t;
tm = *tmp;
t = mktime(&tm);
if (t - *tp >= 1 || *tp - t >= 1) {
(void) fflush(stdout);
(void) fprintf(stderr, "\n%s: ", progname);
(void) fprintf(stderr, tformat(), *tp);
(void) fprintf(stderr, " ->");
(void) fprintf(stderr, " year=%d", tmp->tm_year);
(void) fprintf(stderr, " mon=%d", tmp->tm_mon);
(void) fprintf(stderr, " mday=%d", tmp->tm_mday);
(void) fprintf(stderr, " hour=%d", tmp->tm_hour);
(void) fprintf(stderr, " min=%d", tmp->tm_min);
(void) fprintf(stderr, " sec=%d", tmp->tm_sec);
(void) fprintf(stderr, " isdst=%d", tmp->tm_isdst);
(void) fprintf(stderr, " -> ");
(void) fprintf(stderr, tformat(), t);
(void) fprintf(stderr, "\n");
}
}
return tmp;
}
#endif /* !defined TYPECHECK */
static void
abbrok(abbrp, zone)
const char * const abbrp;
const char * const zone;
{
register const char * cp;
register char * wp;
if (warned)
return;
cp = abbrp;
wp = NULL;
while (isascii((unsigned char) *cp) && isalpha((unsigned char) *cp))
++cp;
if (cp - abbrp == 0)
wp = _("lacks alphabetic at start");
else if (cp - abbrp < 3)
wp = _("has fewer than 3 alphabetics");
else if (cp - abbrp > 6)
wp = _("has more than 6 alphabetics");
if (wp == NULL && (*cp == '+' || *cp == '-')) {
++cp;
if (isascii((unsigned char) *cp) &&
isdigit((unsigned char) *cp))
if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
++cp;
if (*cp != '\0')
wp = _("differs from POSIX standard");
}
if (wp == NULL)
return;
(void) fflush(stdout);
(void) fprintf(stderr,
_("%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"),
progname, zone, abbrp, wp);
warned = TRUE;
}
int
main(argc, argv)
int argc;
char * argv[];
{
register int i;
register int c;
register int vflag;
register char * cutarg;
register long cutloyear = ZDUMP_LO_YEAR;
register long cuthiyear = ZDUMP_HI_YEAR;
register time_t cutlotime;
register time_t cuthitime;
register char ** fakeenv;
time_t now;
time_t t;
time_t newt;
struct tm tm;
struct tm newtm;
register struct tm * tmp;
register struct tm * newtmp;
INITIALIZE(cutlotime);
INITIALIZE(cuthitime);
#if HAVE_GETTEXT
(void) setlocale(LC_ALL, "");
#ifdef TZ_DOMAINDIR
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined TEXTDOMAINDIR */
(void) textdomain(TZ_DOMAIN);
#endif /* HAVE_GETTEXT */
progname = argv[0];
for (i = 1; i < argc; ++i)
if (strcmp(argv[i], "--version") == 0) {
(void) printf("%s\n", elsieid);
exit(EXIT_SUCCESS);
}
vflag = 0;
cutarg = NULL;
while ((c = getopt(argc, argv, "c:v")) == 'c' || c == 'v')
if (c == 'v')
vflag = 1;
else cutarg = optarg;
if ((c != EOF && c != -1) ||
(optind == argc - 1 && strcmp(argv[optind], "=") == 0)) {
(void) fprintf(stderr,
_("%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"),
progname, progname);
exit(EXIT_FAILURE);
}
if (vflag) {
if (cutarg != NULL) {
long lo;
long hi;
char dummy;
if (sscanf(cutarg, "%ld%c", &hi, &dummy) == 1) {
cuthiyear = hi;
} else if (sscanf(cutarg, "%ld,%ld%c",
&lo, &hi, &dummy) == 2) {
cutloyear = lo;
cuthiyear = hi;
} else {
(void) fprintf(stderr, _("%s: wild -c argument %s\n"),
progname, cutarg);
exit(EXIT_FAILURE);
}
}
setabsolutes();
cutlotime = yeartot(cutloyear);
cuthitime = yeartot(cuthiyear);
}
(void) time(&now);
longest = 0;
for (i = optind; i < argc; ++i)
if (strlen(argv[i]) > longest)
longest = strlen(argv[i]);
{
register int from;
register int to;
for (i = 0; environ[i] != NULL; ++i)
continue;
fakeenv = (char **) malloc((size_t) ((i + 2) *
sizeof *fakeenv));
if (fakeenv == NULL ||
(fakeenv[0] = (char *) malloc(longest + 4)) == NULL) {
(void) perror(progname);
exit(EXIT_FAILURE);
}
to = 0;
(void) strcpy(fakeenv[to++], "TZ=");
for (from = 0; environ[from] != NULL; ++from)
if (strncmp(environ[from], "TZ=", 3) != 0)
fakeenv[to++] = environ[from];
fakeenv[to] = NULL;
environ = fakeenv;
}
for (i = optind; i < argc; ++i) {
static char buf[MAX_STRING_LENGTH];
(void) strcpy(&fakeenv[0][3], argv[i]);
if (!vflag) {
show(argv[i], now, FALSE);
continue;
}
warned = FALSE;
t = absolute_min_time;
show(argv[i], t, TRUE);
t += SECSPERHOUR * HOURSPERDAY;
show(argv[i], t, TRUE);
if (t < cutlotime)
t = cutlotime;
tmp = my_localtime(&t);
if (tmp != NULL) {
tm = *tmp;
(void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
}
for ( ; ; ) {
if (t >= cuthitime)
break;
newt = t + SECSPERHOUR * 12;
if (newt >= cuthitime)
break;
if (newt <= t)
break;
newtmp = localtime(&newt);
if (newtmp != NULL)
newtm = *newtmp;
if ((tmp == NULL || newtmp == NULL) ? (tmp != newtmp) :
(delta(&newtm, &tm) != (newt - t) ||
newtm.tm_isdst != tm.tm_isdst ||
strcmp(abbr(&newtm), buf) != 0)) {
newt = hunt(argv[i], t, newt);
newtmp = localtime(&newt);
if (newtmp != NULL) {
newtm = *newtmp;
(void) strncpy(buf,
abbr(&newtm),
(sizeof buf) - 1);
}
}
t = newt;
tm = newtm;
tmp = newtmp;
}
t = absolute_max_time;
t -= SECSPERHOUR * HOURSPERDAY;
show(argv[i], t, TRUE);
t += SECSPERHOUR * HOURSPERDAY;
show(argv[i], t, TRUE);
}
if (fflush(stdout) || ferror(stdout)) {
(void) fprintf(stderr, "%s: ", progname);
(void) perror(_("Error writing standard output"));
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
/* If exit fails to exit... */
return EXIT_FAILURE;
}
static void
setabsolutes()
{
if (0.5 == (time_t) 0.5) {
/*
** time_t is floating.
*/
if (sizeof (time_t) == sizeof (float)) {
absolute_min_time = (time_t) -FLT_MAX;
absolute_max_time = (time_t) FLT_MAX;
} else if (sizeof (time_t) == sizeof (double)) {
absolute_min_time = (time_t) -DBL_MAX;
absolute_max_time = (time_t) DBL_MAX;
} else {
(void) fprintf(stderr,
_("%s: use of -v on system with floating time_t other than float or double\n"),
progname);
exit(EXIT_FAILURE);
}
} else if (0 > (time_t) -1) {
/*
** time_t is signed. Assume overflow wraps around.
*/
time_t t = 0;
time_t t1 = 1;
while (t < t1) {
t = t1;
t1 = 2 * t1 + 1;
}
absolute_max_time = t;
t = -t;
absolute_min_time = t - 1;
if (t < absolute_min_time)
absolute_min_time = t;
} else {
/*
** time_t is unsigned.
*/
absolute_min_time = 0;
absolute_max_time = absolute_min_time - 1;
}
}
static time_t
yeartot(y)
const long y;
{
register long myy;
register long seconds;
register time_t t;
myy = EPOCH_YEAR;
t = 0;
while (myy != y) {
if (myy < y) {
seconds = isleap(myy) ? SECSPERLYEAR : SECSPERNYEAR;
++myy;
if (t > absolute_max_time - seconds) {
t = absolute_max_time;
break;
}
t += seconds;
} else {
--myy;
seconds = isleap(myy) ? SECSPERLYEAR : SECSPERNYEAR;
if (t < absolute_min_time + seconds) {
t = absolute_min_time;
break;
}
t -= seconds;
}
}
return t;
}
static time_t
#if __STDC__
hunt(char *name, time_t lot, time_t hit)
#else /* !__STDC__ */
hunt(name, lot, hit)
char * name;
time_t lot;
time_t hit;
#endif /* !__STDC__ */
{
time_t t;
long diff;
struct tm lotm;
register struct tm * lotmp;
struct tm tm;
register struct tm * tmp;
char loab[MAX_STRING_LENGTH];
lotmp = my_localtime(&lot);
if (lotmp != NULL) {
lotm = *lotmp;
(void) strncpy(loab, abbr(&lotm), (sizeof loab) - 1);
}
for ( ; ; ) {
diff = (long) (hit - lot);
if (diff < 2)
break;
t = lot;
t += diff / 2;
if (t <= lot)
++t;
else if (t >= hit)
--t;
tmp = my_localtime(&t);
if (tmp != NULL)
tm = *tmp;
if ((lotmp == NULL || tmp == NULL) ? (lotmp == tmp) :
(delta(&tm, &lotm) == (t - lot) &&
tm.tm_isdst == lotm.tm_isdst &&
strcmp(abbr(&tm), loab) == 0)) {
lot = t;
lotm = tm;
lotmp = tmp;
} else hit = t;
}
show(name, lot, TRUE);
show(name, hit, TRUE);
return hit;
}
/*
** Thanks to Paul Eggert for logic used in delta.
*/
static long
delta(newp, oldp)
struct tm * newp;
struct tm * oldp;
{
register long result;
register int tmy;
if (newp->tm_year < oldp->tm_year)
return -delta(oldp, newp);
result = 0;
for (tmy = oldp->tm_year; tmy < newp->tm_year; ++tmy)
result += DAYSPERNYEAR + isleap_sum(tmy, TM_YEAR_BASE);
result += newp->tm_yday - oldp->tm_yday;
result *= HOURSPERDAY;
result += newp->tm_hour - oldp->tm_hour;
result *= MINSPERHOUR;
result += newp->tm_min - oldp->tm_min;
result *= SECSPERMIN;
result += newp->tm_sec - oldp->tm_sec;
return result;
}
static void
#if __STDC__
show(char *zone, time_t t, int v)
#else /* !__STDC__ */
show(zone, t, v)
char * zone;
time_t t;
int v;
#endif /* !__STDC__ */
{
register struct tm * tmp;
(void) printf("%-*s ", (int) longest, zone);
if (v) {
tmp = gmtime(&t);
if (tmp == NULL) {
(void) printf(tformat(), t);
} else {
dumptime(tmp);
(void) printf(" UTC");
}
(void) printf(" = ");
}
tmp = my_localtime(&t);
dumptime(tmp);
if (tmp != NULL) {
if (*abbr(tmp) != '\0')
(void) printf(" %s", abbr(tmp));
if (v) {
(void) printf(" isdst=%d", tmp->tm_isdst);
#ifdef TM_GMTOFF
(void) printf(" gmtoff=%ld", tmp->TM_GMTOFF);
#endif /* defined TM_GMTOFF */
}
}
(void) printf("\n");
if (tmp != NULL && *abbr(tmp) != '\0')
abbrok(abbr(tmp), zone);
}
static char *
abbr(tmp)
struct tm * tmp;
{
register char * result;
static char nada;
if (tmp->tm_isdst != 0 && tmp->tm_isdst != 1)
return &nada;
result = tzname[tmp->tm_isdst];
return (result == NULL) ? &nada : result;
}
/*
** The code below can fail on certain theoretical systems;
** it works on all known real-world systems as of 2004-12-30.
*/
static const char *
tformat()
{
if (0.5 == (time_t) 0.5) { /* floating */
if (sizeof (time_t) > sizeof (double))
return "%Lg";
return "%g";
}
if (0 > (time_t) -1) { /* signed */
if (sizeof (time_t) > sizeof (long))
return "%lld";
if (sizeof (time_t) > sizeof (int))
return "%ld";
return "%d";
}
if (sizeof (time_t) > sizeof (unsigned long))
return "%llu";
if (sizeof (time_t) > sizeof (unsigned int))
return "%lu";
return "%u";
}
static void
dumptime(timeptr)
register const struct tm * timeptr;
{
static const char wday_name[][3] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
static const char mon_name[][3] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
register const char * wn;
register const char * mn;
register int lead;
register int trail;
if (timeptr == NULL) {
(void) printf("NULL");
return;
}
/*
** The packaged versions of localtime and gmtime never put out-of-range
** values in tm_wday or tm_mon, but since this code might be compiled
** with other (perhaps experimental) versions, paranoia is in order.
*/
if (timeptr->tm_wday < 0 || timeptr->tm_wday >=
(int) (sizeof wday_name / sizeof wday_name[0]))
wn = "???";
else wn = wday_name[timeptr->tm_wday];
if (timeptr->tm_mon < 0 || timeptr->tm_mon >=
(int) (sizeof mon_name / sizeof mon_name[0]))
mn = "???";
else mn = mon_name[timeptr->tm_mon];
(void) printf("%.3s %.3s%3d %.2d:%.2d:%.2d ",
wn, mn,
timeptr->tm_mday, timeptr->tm_hour,
timeptr->tm_min, timeptr->tm_sec);
#define DIVISOR 10
trail = timeptr->tm_year % DIVISOR + TM_YEAR_BASE % DIVISOR;
lead = timeptr->tm_year / DIVISOR + TM_YEAR_BASE / DIVISOR +
trail / DIVISOR;
trail %= DIVISOR;
if (trail < 0 && lead > 0) {
trail += DIVISOR;
--lead;
} else if (lead < 0 && trail > 0) {
trail -= DIVISOR;
++lead;
}
if (lead == 0)
(void) printf("%d", trail);
else (void) printf("%d%d", lead, ((trail < 0) ? -trail : trail));
}

436
commands/zoneinfo/zic.8 Normal file
View file

@ -0,0 +1,436 @@
.TH ZIC 8
.SH NAME
zic \- time zone compiler
.SH SYNOPSIS
.B zic
[
.B \-\-version
]
[
.B \-v
] [
.B \-d
.I directory
] [
.B \-l
.I localtime
] [
.B \-p
.I posixrules
] [
.B \-L
.I leapsecondfilename
] [
.B \-s
] [
.B \-y
.I command
] [
.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 "\-\-version"
Output version information and exit.
.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.
Also complain if a time of 24:00
(which cannot be handled by pre-1998 versions of
.IR zic )
appears in the input.
.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.
.TP
.BI "\-y " command
Use the given
.I command
rather than
.B yearistype
when checking year types (see below).
.PP
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
.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 US 1967 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.
Any integer year can be supplied; the Gregorian calendar is assumed.
The word
.B minimum
(or an abbreviation) means the minimum year representable as an integer.
The word
.B maximum
(or an abbreviation) means the maximum year representable as an integer.
Rules can describe times that are not representable as time values,
with the unrepresentable times ignored; this allows rules to be portable
among hosts with differing time value types.
.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 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
\- equivalent to 0
.fi
.in -.5i
.sp
where hour 0 is midnight at the start of the day,
and hour 24 is midnight at the end of the day.
Any of these forms may be followed by the letter
.B w
if the given time is local
.q "wall clock"
time,
.B s
if the given time is local
.q standard
time, or
.B u
(or
.B g
or
.BR z )
if the given time is universal time;
in the absence of an indicator,
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/Adelaide\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/Adelaide 9:30 Aus CST 1971 Oct 31 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 UTC 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 UTC.
.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.
Alternately,
a slash (/)
separates standard and daylight abbreviations.
.TP
.B UNTIL
The time at which the UTC 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 UTC offset
and rule change until the time specified.
The month, day, and time of day have the same format as the IN, ON, and AT
columns of a rule; trailing columns can be omitted, and default to the
earliest possible value for the missing columns.
.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
.ta \w'Link\0\0'u +\w'Europe/Istanbul\0\0'u
Link LINK-FROM LINK-TO
.sp
For example:
.sp
.ti +.5i
Link Europe/Istanbul Asia/Istanbul
.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
.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
.sp
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.
.\" There's no need to document the following, since it's impossible for more
.\" than one leap second to be inserted or deleted at a time.
.\" The C Standard is in error in suggesting the possibility.
.\" See Terry J Quinn, The BIPM and the accurate measure of time,
.\" Proc IEEE 79, 7 (July 1991), 894-905.
.\" or
.\" .q ++
.\" if two seconds were added
.\" or
.\" .q --
.\" if two seconds were 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 UTC
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 NOTES
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.
.PP
If,
for a particular zone,
a clock advance caused by the start of daylight saving
coincides with and is equal to
a clock retreat caused by a change in UTC offset,
.IR zic
produces a single transition to daylight saving at the new UTC offset
(without any change in wall clock time).
To get separate transitions
use multiple zone continuation lines
specifying transition instants using universal time.
.SH FILE
/usr/local/etc/zoneinfo standard directory used for created files
.SH "SEE ALSO"
newctime(3), tzfile(5), zdump(8)
.\" @(#)zic.8 7.24

259
commands/zoneinfo/zic.8.txt Normal file
View file

@ -0,0 +1,259 @@
NAME
zic - time zone compiler
SYNOPSIS
zic [ --version ] [ -v ] [ -d directory ] [ -l localtime ] [
-p posixrules ] [ -L leapsecondfilename ] [ -s ] [ -y
command ] [ filename ... ]
DESCRIPTION
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 filename is -, the standard input is
read.
These options are available:
--version
Output version information and exit.
-d directory
Create time conversion information files in the named
directory rather than in the standard directory named
below.
-l timezone
Use the given time zone as local time. Zic will act as
if the input contained a link line of the form
Link timezone localtime
-p timezone
Use the given time zone's rules when handling POSIX-
format time zone environment variables. Zic will act
as if the input contained a link line of the form
Link timezone posixrules
-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.
-v Complain if a year that appears in a data file is
outside the range of years representable by time(2)
values. Also complain if a time of 24:00 (which cannot
be handled by pre-1998 versions of zic) appears in the
input.
-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.
-y command
Use the given command rather than yearistype when
checking year types (see below).
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.
A rule line has the form
Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
For example:
Rule US 1967 1973 - Apr lastSun 2:00 1:00 D
The fields that make up a rule line are:
NAME Gives the (arbitrary) name of the set of rules this
rule is part of.
FROM Gives the first year in which the rule applies. Any
integer year can be supplied; the Gregorian calendar
is assumed. The word minimum (or an abbreviation)
means the minimum year representable as an integer.
The word maximum (or an abbreviation) means the
maximum year representable as an integer. Rules can
describe times that are not representable as time
values, with the unrepresentable times ignored; this
allows rules to be portable among hosts with
differing time value types.
TO Gives the final year in which the rule applies. In
addition to minimum and maximum (as above), the word
only (or an abbreviation) may be used to repeat the
value of the FROM field.
TYPE Gives the type of year in which the rule applies.
If TYPE is - then the rule applies in all years
between FROM and TO inclusive. If TYPE is something
else, then zic executes the command
yearistype year type
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.
IN Names the month in which the rule takes effect.
Month names may be abbreviated.
ON Gives the day on which the rule takes effect.
Recognized forms include:
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
Names of days of the week may be abbreviated or
spelled out in full. Note that there must be no
spaces within the ON field.
AT Gives the time of day at which the rule takes
effect. Recognized forms include:
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
- equivalent to 0
where hour 0 is midnight at the start of the day,
and hour 24 is midnight at the end of the day. Any
of these forms may be followed by the letter w if
the given time is local "wall clock" time, s if the
given time is local "standard" time, or u (or g or
z) if the given time is universal time; in the
absence of an indicator, wall clock time is assumed.
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 AT field (although,
of course, the w and s suffixes are not used).
LETTER/S
Gives the "variable part" (for example, the "S" or
"D" in "EST" or "EDT") of time zone abbreviations to
be used when this rule is in effect. If this field
is -, the variable part is null.
A zone line has the form
Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
For example:
Zone Australia/Adelaide 9:30 Aus CST 1971 Oct 31 2:00
The fields that make up a zone line are:
NAME The name of the time zone. This is the name used in
creating the time conversion information file for the
zone.
GMTOFF
The amount of time to add to UTC to get standard time
in this zone. This field has the same format as the
AT and SAVE fields of rule lines; begin the field with
a minus sign if time must be subtracted from UTC.
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 - then standard time
always applies in the time zone.
FORMAT
The format for time zone abbreviations in this time
zone. The pair of characters %s is used to show where
the "variable part" of the time zone abbreviation
goes. Alternately, a slash (/) separates standard and
daylight abbreviations.
UNTIL The time at which the UTC 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 UTC
offset and rule change until the time specified. The
month, day, and time of day have the same format as
the IN, ON, and AT columns of a rule; trailing columns
can be omitted, and default to the earliest possible
value for the missing columns.
The next line must be a "continuation" line; this has
the same form as a zone line except that the string
"Zone" and the name are omitted, as the continuation
line will place information starting at the time
specified as the UNTIL field in the previous line in
the file used by the previous line. Continuation
lines may contain an UNTIL field, just as zone lines
do, indicating that the next line is a further
continuation.
A link line has the form
Link LINK-FROM LINK-TO
For example:
Link Europe/Istanbul Asia/Istanbul
The LINK-FROM field should appear as the NAME field in some
zone line; the LINK-TO field is used as an alternate name
for that zone.
Except for continuation lines, lines may appear in any order
in the input.
Lines in the file that describes leap seconds have the
following form:
Leap YEAR MONTH DAY HH:MM:SS CORR R/S
For example:
Leap 1974 Dec 31 23:59:60 + S
The YEAR, MONTH, DAY, and HH:MM:SS fields tell when the leap
second happened. The CORR field should be "+" if a second
was added or "-" if a second was skipped. The R/S field
should be (an abbreviation of) "Stationary" if the leap
second time given by the other fields should be interpreted
as UTC or (an abbreviation of) "Rolling" if the leap second
time given by the other fields should be interpreted as
local wall clock time.
NOTES
For areas with more than two types of local time, you may
need to use local standard time in the AT field of the
earliest transition time's rule to ensure that the earliest
transition time recorded in the compiled file is correct.
If, for a particular zone, a clock advance caused by the
start of daylight saving coincides with and is equal to a
clock retreat caused by a change in UTC offset, zic produces
a single transition to daylight saving at the new UTC offset
(without any change in wall clock time). To get separate
transitions use multiple zone continuation lines specifying
transition instants using universal time.
FILE
/usr/local/etc/zoneinfo standard directory used for created
files
SEE ALSO
newctime(3), tzfile(5), zdump(8)

2316
commands/zoneinfo/zic.c Normal file

File diff suppressed because it is too large Load diff

420
commands/zoneinfo/zone.tab Normal file
View file

@ -0,0 +1,420 @@
# @(#)zone.tab 8.10
#
# TZ zone descriptions
#
# From Paul Eggert (1996-08-05):
#
# This file contains a table with the following columns:
# 1. ISO 3166 2-character country code. See the file `iso3166.tab'.
# 2. Latitude and longitude of the zone's principal location
# in ISO 6709 sign-degrees-minutes-seconds format,
# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
# first latitude (+ is north), then longitude (+ is east).
# 3. Zone name used in value of TZ environment variable.
# 4. Comments; present if and only if the country has multiple rows.
#
# Columns are separated by a single tab.
# The table is sorted first by country, then an order within the country that
# (1) makes some geographical sense, and
# (2) puts the most populous zones first, where that does not contradict (1).
#
# Lines beginning with `#' are comments.
#
#country-
#code coordinates TZ comments
AD +4230+00131 Europe/Andorra
AE +2518+05518 Asia/Dubai
AF +3431+06912 Asia/Kabul
AG +1703-06148 America/Antigua
AI +1812-06304 America/Anguilla
AL +4120+01950 Europe/Tirane
AM +4011+04430 Asia/Yerevan
AN +1211-06900 America/Curacao
AO -0848+01314 Africa/Luanda
AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island
AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole
AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island
AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island
AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
AQ -7824+10654 Antarctica/Vostok Vostok Station, S Magnetic Pole
AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Base, Terre Adelie
AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, LP, MN, NQ, RN, SA, SE, SF, SL)
AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)
AR -2649-06513 America/Argentina/Tucuman Tucuman (TM)
AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH)
AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)
AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)
AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ)
AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC)
AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF)
AS -1416-17042 Pacific/Pago_Pago
AT +4813+01620 Europe/Vienna
AU -3133+15905 Australia/Lord_Howe Lord Howe Island
AU -4253+14719 Australia/Hobart Tasmania - most locations
AU -3956+14352 Australia/Currie Tasmania - King Island
AU -3749+14458 Australia/Melbourne Victoria
AU -3352+15113 Australia/Sydney New South Wales - most locations
AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna
AU -2728+15302 Australia/Brisbane Queensland - most locations
AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands
AU -3455+13835 Australia/Adelaide South Australia
AU -1228+13050 Australia/Darwin Northern Territory
AU -3157+11551 Australia/Perth Western Australia - most locations
AU -3143+12852 Australia/Eucla Western Australia - Eucla area
AW +1230-06858 America/Aruba
AX +6006+01957 Europe/Mariehamn
AZ +4023+04951 Asia/Baku
BA +4352+01825 Europe/Sarajevo
BB +1306-05937 America/Barbados
BD +2343+09025 Asia/Dhaka
BE +5050+00420 Europe/Brussels
BF +1222-00131 Africa/Ouagadougou
BG +4241+02319 Europe/Sofia
BH +2623+05035 Asia/Bahrain
BI -0323+02922 Africa/Bujumbura
BJ +0629+00237 Africa/Porto-Novo
BM +3217-06446 Atlantic/Bermuda
BN +0456+11455 Asia/Brunei
BO -1630-06809 America/La_Paz
BR -0351-03225 America/Noronha Atlantic islands
BR -0127-04829 America/Belem Amapa, E Para
BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB)
BR -0803-03454 America/Recife Pernambuco
BR -0712-04812 America/Araguaina Tocantins
BR -0940-03543 America/Maceio Alagoas, Sergipe
BR -1259-03831 America/Bahia Bahia
BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)
BR -2027-05437 America/Campo_Grande Mato Grosso do Sul
BR -1535-05605 America/Cuiaba Mato Grosso
BR -0846-06354 America/Porto_Velho W Para, Rondonia
BR +0249-06040 America/Boa_Vista Roraima
BR -0308-06001 America/Manaus E Amazonas
BR -0640-06952 America/Eirunepe W Amazonas
BR -0958-06748 America/Rio_Branco Acre
BS +2505-07721 America/Nassau
BT +2728+08939 Asia/Thimphu
BW -2545+02555 Africa/Gaborone
BY +5354+02734 Europe/Minsk
BZ +1730-08812 America/Belize
CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador
CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI
CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
CA +4606-06447 America/Moncton Atlantic Time - New Brunswick
CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations
CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore
CA +4531-07334 America/Montreal Eastern Time - Quebec - most locations
CA +4339-07923 America/Toronto Eastern Time - Ontario - most locations
CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
CA +744144-0944945 America/Resolute Eastern Time - Resolute, Nunavut
CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
CA +6903-10505 America/Cambridge_Bay Central Time - west Nunavut
CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations
CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest
CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan
CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories
CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
CA +6404-13925 America/Dawson Pacific Time - north Yukon
CC -1210+09655 Indian/Cocos
CD -0418+01518 Africa/Kinshasa west Dem. Rep. of Congo
CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo
CF +0422+01835 Africa/Bangui
CG -0416+01517 Africa/Brazzaville
CH +4723+00832 Europe/Zurich
CI +0519-00402 Africa/Abidjan
CK -2114-15946 Pacific/Rarotonga
CL -3327-07040 America/Santiago most locations
CL -2709-10926 Pacific/Easter Easter Island & Sala y Gomez
CM +0403+00942 Africa/Douala
CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc.
CN +4545+12641 Asia/Harbin Heilongjiang (except Mohe), Jilin
CN +2934+10635 Asia/Chongqing central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
CN +4348+08735 Asia/Urumqi most of Tibet & Xinjiang
CN +3929+07559 Asia/Kashgar west Tibet & Xinjiang
CO +0436-07405 America/Bogota
CR +0956-08405 America/Costa_Rica
CU +2308-08222 America/Havana
CV +1455-02331 Atlantic/Cape_Verde
CX -1025+10543 Indian/Christmas
CY +3510+03322 Asia/Nicosia
CZ +5005+01426 Europe/Prague
DE +5230+01322 Europe/Berlin
DJ +1136+04309 Africa/Djibouti
DK +5540+01235 Europe/Copenhagen
DM +1518-06124 America/Dominica
DO +1828-06954 America/Santo_Domingo
DZ +3647+00303 Africa/Algiers
EC -0210-07950 America/Guayaquil mainland
EC -0054-08936 Pacific/Galapagos Galapagos Islands
EE +5925+02445 Europe/Tallinn
EG +3003+03115 Africa/Cairo
EH +2709-01312 Africa/El_Aaiun
ER +1520+03853 Africa/Asmara
ES +4024-00341 Europe/Madrid mainland
ES +3553-00519 Africa/Ceuta Ceuta & Melilla
ES +2806-01524 Atlantic/Canary Canary Islands
ET +0902+03842 Africa/Addis_Ababa
FI +6010+02458 Europe/Helsinki
FJ -1808+17825 Pacific/Fiji
FK -5142-05751 Atlantic/Stanley
FM +0725+15147 Pacific/Truk Truk (Chuuk) and Yap
FM +0658+15813 Pacific/Ponape Ponape (Pohnpei)
FM +0519+16259 Pacific/Kosrae Kosrae
FO +6201-00646 Atlantic/Faroe
FR +4852+00220 Europe/Paris
GA +0023+00927 Africa/Libreville
GB +512830-0001845 Europe/London
GD +1203-06145 America/Grenada
GE +4143+04449 Asia/Tbilisi
GF +0456-05220 America/Cayenne
GG +4927-00232 Europe/Guernsey
GH +0533-00013 Africa/Accra
GI +3608-00521 Europe/Gibraltar
GL +6411-05144 America/Godthab most locations
GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund
GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit
GL +7634-06847 America/Thule Thule / Pituffik
GM +1328-01639 Africa/Banjul
GN +0931-01343 Africa/Conakry
GP +1614-06132 America/Guadeloupe
GQ +0345+00847 Africa/Malabo
GR +3758+02343 Europe/Athens
GS -5416-03632 Atlantic/South_Georgia
GT +1438-09031 America/Guatemala
GU +1328+14445 Pacific/Guam
GW +1151-01535 Africa/Bissau
GY +0648-05810 America/Guyana
HK +2217+11409 Asia/Hong_Kong
HN +1406-08713 America/Tegucigalpa
HR +4548+01558 Europe/Zagreb
HT +1832-07220 America/Port-au-Prince
HU +4730+01905 Europe/Budapest
ID -0610+10648 Asia/Jakarta Java & Sumatra
ID -0002+10920 Asia/Pontianak west & central Borneo
ID -0507+11924 Asia/Makassar east & south Borneo, Celebes, Bali, Nusa Tengarra, west Timor
ID -0232+14042 Asia/Jayapura Irian Jaya & the Moluccas
IE +5320-00615 Europe/Dublin
IL +3146+03514 Asia/Jerusalem
IM +5409-00428 Europe/Isle_of_Man
IN +2232+08822 Asia/Calcutta
IO -0720+07225 Indian/Chagos
IQ +3321+04425 Asia/Baghdad
IR +3540+05126 Asia/Tehran
IS +6409-02151 Atlantic/Reykjavik
IT +4154+01229 Europe/Rome
JE +4912-00207 Europe/Jersey
JM +1800-07648 America/Jamaica
JO +3157+03556 Asia/Amman
JP +353916+1394441 Asia/Tokyo
KE -0117+03649 Africa/Nairobi
KG +4254+07436 Asia/Bishkek
KH +1133+10455 Asia/Phnom_Penh
KI +0125+17300 Pacific/Tarawa Gilbert Islands
KI -0308-17105 Pacific/Enderbury Phoenix Islands
KI +0152-15720 Pacific/Kiritimati Line Islands
KM -1141+04316 Indian/Comoro
KN +1718-06243 America/St_Kitts
KP +3901+12545 Asia/Pyongyang
KR +3733+12658 Asia/Seoul
KW +2920+04759 Asia/Kuwait
KY +1918-08123 America/Cayman
KZ +4315+07657 Asia/Almaty most locations
KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda)
KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe)
KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau)
KZ +5113+05121 Asia/Oral West Kazakhstan
LA +1758+10236 Asia/Vientiane
LB +3353+03530 Asia/Beirut
LC +1401-06100 America/St_Lucia
LI +4709+00931 Europe/Vaduz
LK +0656+07951 Asia/Colombo
LR +0618-01047 Africa/Monrovia
LS -2928+02730 Africa/Maseru
LT +5441+02519 Europe/Vilnius
LU +4936+00609 Europe/Luxembourg
LV +5657+02406 Europe/Riga
LY +3254+01311 Africa/Tripoli
MA +3339-00735 Africa/Casablanca
MC +4342+00723 Europe/Monaco
MD +4700+02850 Europe/Chisinau
ME +4226+01916 Europe/Podgorica
MG -1855+04731 Indian/Antananarivo
MH +0709+17112 Pacific/Majuro most locations
MH +0905+16720 Pacific/Kwajalein Kwajalein
MK +4159+02126 Europe/Skopje
ML +1239-00800 Africa/Bamako
MM +1647+09610 Asia/Rangoon
MN +4755+10653 Asia/Ulaanbaatar most locations
MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar
MO +2214+11335 Asia/Macau
MP +1512+14545 Pacific/Saipan
MQ +1436-06105 America/Martinique
MR +1806-01557 Africa/Nouakchott
MS +1643-06213 America/Montserrat
MT +3554+01431 Europe/Malta
MU -2010+05730 Indian/Mauritius
MV +0410+07330 Indian/Maldives
MW -1547+03500 Africa/Blantyre
MX +1924-09909 America/Mexico_City Central Time - most locations
MX +2105-08646 America/Cancun Central Time - Quintana Roo
MX +2058-08937 America/Merida Central Time - Campeche, Yucatan
MX +2540-10019 America/Monterrey Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas
MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa
MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua
MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
MX +3232-11701 America/Tijuana Pacific Time
MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia
MY +0133+11020 Asia/Kuching Sabah & Sarawak
MZ -2558+03235 Africa/Maputo
NA -2234+01706 Africa/Windhoek
NC -2216+16530 Pacific/Noumea
NE +1331+00207 Africa/Niamey
NF -2903+16758 Pacific/Norfolk
NG +0627+00324 Africa/Lagos
NI +1209-08617 America/Managua
NL +5222+00454 Europe/Amsterdam
NO +5955+01045 Europe/Oslo
NP +2743+08519 Asia/Katmandu
NR -0031+16655 Pacific/Nauru
NU -1901+16955 Pacific/Niue
NZ -3652+17446 Pacific/Auckland most locations
NZ -4357-17633 Pacific/Chatham Chatham Islands
OM +2336+05835 Asia/Muscat
PA +0858-07932 America/Panama
PE -1203-07703 America/Lima
PF -1732-14934 Pacific/Tahiti Society Islands
PF -0900-13930 Pacific/Marquesas Marquesas Islands
PF -2308-13457 Pacific/Gambier Gambier Islands
PG -0930+14710 Pacific/Port_Moresby
PH +1435+12100 Asia/Manila
PK +2452+06703 Asia/Karachi
PL +5215+02100 Europe/Warsaw
PM +4703-05620 America/Miquelon
PN -2504-13005 Pacific/Pitcairn
PR +182806-0660622 America/Puerto_Rico
PS +3130+03428 Asia/Gaza
PT +3843-00908 Europe/Lisbon mainland
PT +3238-01654 Atlantic/Madeira Madeira Islands
PT +3744-02540 Atlantic/Azores Azores
PW +0720+13429 Pacific/Palau
PY -2516-05740 America/Asuncion
QA +2517+05132 Asia/Qatar
RE -2052+05528 Indian/Reunion
RO +4426+02606 Europe/Bucharest
RS +4450+02030 Europe/Belgrade
RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
RU +5312+05009 Europe/Samara Moscow+01 - Samara, Udmurtia
RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
RU +5934+15048 Asia/Magadan Moscow+08 - Magadan
RU +5301+15839 Asia/Kamchatka Moscow+09 - Kamchatka
RU +6445+17729 Asia/Anadyr Moscow+10 - Bering Sea
RW -0157+03004 Africa/Kigali
SA +2438+04643 Asia/Riyadh
SB -0932+16012 Pacific/Guadalcanal
SC -0440+05528 Indian/Mahe
SD +1536+03232 Africa/Khartoum
SE +5920+01803 Europe/Stockholm
SG +0117+10351 Asia/Singapore
SH -1555-00542 Atlantic/St_Helena
SI +4603+01431 Europe/Ljubljana
SJ +7800+01600 Arctic/Longyearbyen Svalbard
SJ +7059-00805 Atlantic/Jan_Mayen Jan Mayen
SK +4809+01707 Europe/Bratislava
SL +0830-01315 Africa/Freetown
SM +4355+01228 Europe/San_Marino
SN +1440-01726 Africa/Dakar
SO +0204+04522 Africa/Mogadishu
SR +0550-05510 America/Paramaribo
ST +0020+00644 Africa/Sao_Tome
SV +1342-08912 America/El_Salvador
SY +3330+03618 Asia/Damascus
SZ -2618+03106 Africa/Mbabane
TC +2128-07108 America/Grand_Turk
TD +1207+01503 Africa/Ndjamena
TF -492110+0701303 Indian/Kerguelen
TG +0608+00113 Africa/Lome
TH +1345+10031 Asia/Bangkok
TJ +3835+06848 Asia/Dushanbe
TK -0922-17114 Pacific/Fakaofo
TL -0833+12535 Asia/Dili
TM +3757+05823 Asia/Ashgabat
TN +3648+01011 Africa/Tunis
TO -2110+17510 Pacific/Tongatapu
TR +4101+02858 Europe/Istanbul
TT +1039-06131 America/Port_of_Spain
TV -0831+17913 Pacific/Funafuti
TW +2503+12130 Asia/Taipei
TZ -0648+03917 Africa/Dar_es_Salaam
UA +5026+03031 Europe/Kiev most locations
UA +4837+02218 Europe/Uzhgorod Ruthenia
UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk
UA +4457+03406 Europe/Simferopol central Crimea
UG +0019+03225 Africa/Kampala
UM +1700-16830 Pacific/Johnston Johnston Atoll
UM +2813-17722 Pacific/Midway Midway Islands
UM +1917+16637 Pacific/Wake Wake Island
US +404251-0740023 America/New_York Eastern Time
US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations
US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area
US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County
US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations
US +411745-0863730 America/Indiana/Knox Eastern Time - Indiana - Starke County
US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County
US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County
US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County
US +415100-0873900 America/Chicago Central Time
US +384038-0873143 America/Indiana/Vincennes Central Time - Indiana - Daviess, Dubois, Knox, Martin & Perry Counties
US +382931-0871643 America/Indiana/Petersburg Central Time - Indiana - Pike County
US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County
US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area)
US +394421-1045903 America/Denver Mountain Time
US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
US +364708-1084111 America/Shiprock Mountain Time - Navajo
US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona
US +340308-1181434 America/Los_Angeles Pacific Time
US +611305-1495401 America/Anchorage Alaska Time
US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
US +643004-1652423 America/Nome Alaska Time - west Alaska
US +515248-1763929 America/Adak Aleutian Islands
US +211825-1575130 Pacific/Honolulu Hawaii
UY -3453-05611 America/Montevideo
UZ +3940+06648 Asia/Samarkand west Uzbekistan
UZ +4120+06918 Asia/Tashkent east Uzbekistan
VA +4154+01227 Europe/Vatican
VC +1309-06114 America/St_Vincent
VE +1030-06656 America/Caracas
VG +1827-06437 America/Tortola
VI +1821-06456 America/St_Thomas
VN +1045+10640 Asia/Saigon
VU -1740+16825 Pacific/Efate
WF -1318-17610 Pacific/Wallis
WS -1350-17144 Pacific/Apia
YE +1245+04512 Asia/Aden
YT -1247+04514 Indian/Mayotte
ZA -2615+02800 Africa/Johannesburg
ZM -1525+02817 Africa/Lusaka
ZW -1750+03103 Africa/Harare