Vendor import of tzcode2009e.

Obtained from: ftp://elsie.nci.nih.gov/pub/
This commit is contained in:
Edwin Groothuis 2009-05-20 12:24:39 +00:00
parent 9556ff65cd
commit 80ca36b52f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/tzcode/dist/; revision=192437
svn path=/vendor/tzcode/tzcode2009e/; revision=192438; tag=vendor/tzcode/tzcode2009e
48 changed files with 9497 additions and 1623 deletions

View file

@ -1,11 +1,17 @@
/*
** This file is in the public domain, so clarified as of
** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
** 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.9";
static char elsieid[] = "@(#)asctime.c 8.2";
#endif /* !defined NOID */
#endif /* !defined lint */
@ -15,7 +21,57 @@ static char elsieid[] = "@(#)asctime.c 7.9";
#include "tzfile.h"
/*
** A la ISO/IEC 9945-1, ANSI/IEEE Std 1003.1, Second Edition, 1996-07-12.
** 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;
** we conditionalize below to avoid 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.
*/
#ifdef __GNUC__
#define ASCTIME_FMT "%.3s %.3s%3d %2.2d:%2.2d:%2.2d %-4s\n"
#else /* !defined __GNUC__ */
#define ASCTIME_FMT "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %-4s\n"
#endif /* !defined __GNUC__ */
/*
** 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).
*/
#ifdef __GNUC__
#define ASCTIME_FMT_B "%.3s %.3s%3d %2.2d:%2.2d:%2.2d %s\n"
#else /* !defined __GNUC__ */
#define ASCTIME_FMT_B "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %s\n"
#endif /* !defined __GNUC__ */
#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 *
@ -32,6 +88,8 @@ char * buf;
};
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 = "???";
@ -40,35 +98,41 @@ char * buf;
mn = "???";
else mn = mon_name[timeptr->tm_mon];
/*
** The X3J11-suggested format is
** "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %d\n"
** Since the .2 in 02.2d is ignored, we drop it.
** 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) sprintf(buf, "%.3s %.3s%3d %02d:%02d:%02d %d\n",
(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,
TM_YEAR_BASE + timeptr->tm_year);
return buf;
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 X3J11, with core dump avoidance.
** A la ISO/IEC 9945-1, ANSI/IEEE Std 1003.1, 2004 Edition.
*/
char *
asctime(timeptr)
register const struct tm * timeptr;
{
/*
** Big enough for something such as
** ??? ???-2147483648 -2147483648:-2147483648:-2147483648 -2147483648\n
** (two three-character abbreviations, five strings denoting integers,
** three explicit spaces, two explicit colons, a newline,
** and a trailing ASCII nul).
*/
static char result[3 * 2 + 5 * INT_STRLEN_MAXIMUM(int) +
3 + 2 + 1 + 1];
return asctime_r(timeptr, result);
return asctime_r(timeptr, buf_asctime);
}

View file

@ -1,83 +1,65 @@
/*
** This file is in the public domain, so clarified as of
** June 5, 1996 by Arthur David Olson (arthur_david_olson@nih.gov).
** 1996-06-05 by Arthur David Olson.
*/
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)difftime.c 7.9";
static char elsieid[] = "@(#)difftime.c 8.1";
#endif /* !defined NOID */
#endif /* !defined lint */
/*LINTLIBRARY*/
#include "private.h"
/*
** Algorithm courtesy Paul Eggert (eggert@twinsun.com).
*/
#ifdef HAVE_LONG_DOUBLE
#define long_double long double
#endif /* defined HAVE_LONG_DOUBLE */
#ifndef HAVE_LONG_DOUBLE
#define long_double double
#endif /* !defined HAVE_LONG_DOUBLE */
#include "private.h" /* for time_t, TYPE_INTEGRAL, and TYPE_SIGNED */
double
difftime(time1, time0)
const time_t time1;
const time_t time0;
{
time_t delta;
time_t hibit;
{
time_t tt;
double d;
long_double ld;
if (sizeof tt < sizeof d)
return (double) time1 - (double) time0;
if (sizeof tt < sizeof ld)
return (long_double) time1 - (long_double) 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));
}
if (time1 < time0)
return -difftime(time0, time1);
/*
** As much as possible, avoid loss of precision
** by computing the difference before converting to double.
** time_t is integral and signed.
** Handle cases where both time1 and time0 have the same sign
** (meaning that their difference cannot overflow).
*/
delta = time1 - time0;
if (delta >= 0)
return delta;
if ((time1 < 0) == (time0 < 0))
return time1 - time0;
/*
** Repair delta overflow.
** time1 and time0 have opposite signs.
** Punt if unsigned long is too narrow.
*/
hibit = (~ (time_t) 0) << (TYPE_BIT(time_t) - 1);
if (sizeof (unsigned long) < sizeof (time_t))
return (double) time1 - (double) time0;
/*
** The following expression rounds twice, which means
** the result may not be the closest to the true answer.
** For example, suppose time_t is 64-bit signed int,
** long_double is IEEE 754 double with default rounding,
** time1 = 9223372036854775807 and time0 = -1536.
** Then the true difference is 9223372036854777343,
** which rounds to 9223372036854777856
** with a total error of 513.
** But delta overflows to -9223372036854774273,
** which rounds to -9223372036854774784, and correcting
** this by subtracting 2 * (long_double) hibit
** (i.e. by adding 2**64 = 18446744073709551616)
** yields 9223372036854776832, which
** rounds to 9223372036854775808
** with a total error of 1535 instead.
** This problem occurs only with very large differences.
** It's too painful to fix this portably.
** We are not alone in this problem;
** some C compilers round twice when converting
** large unsigned types to small floating types,
** so if time_t is unsigned the "return delta" above
** has the same double-rounding problem with those compilers.
** Stay calm...decent optimizers will eliminate the complexity below.
*/
return delta - 2 * (long_double) hibit;
if (time1 >= 0 /* && time0 < 0 */)
return (unsigned long) time1 +
(unsigned long) (-(time0 + 1)) + 1;
return -(double) ((unsigned long) time0 +
(unsigned long) (-(time1 + 1)) + 1);
}

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,7 @@
/*
** This file is in the public domain, so clarified as of
** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
** 1996-06-05 by Arthur David Olson.
*/
/*
@ -21,10 +21,12 @@
#ifndef lint
#ifndef NOID
static char privatehid[] = "@(#)private.h 7.53";
static char privatehid[] = "@(#)private.h 8.6";
#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'.
@ -46,10 +48,6 @@ static char privatehid[] = "@(#)private.h 7.53";
#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 */
@ -87,17 +85,17 @@ static char privatehid[] = "@(#)private.h 7.53";
#include "stdio.h"
#include "errno.h"
#include "string.h"
#include "limits.h" /* for CHAR_BIT */
#include "limits.h" /* for CHAR_BIT et al. */
#include "time.h"
#include "stdlib.h"
#if HAVE_GETTEXT - 0
#if HAVE_GETTEXT
#include "libintl.h"
#endif /* HAVE_GETTEXT - 0 */
#endif /* HAVE_GETTEXT */
#if HAVE_SYS_WAIT_H - 0
#if HAVE_SYS_WAIT_H
#include <sys/wait.h> /* for WIFEXITED and WEXITSTATUS */
#endif /* HAVE_SYS_WAIT_H - 0 */
#endif /* HAVE_SYS_WAIT_H */
#ifndef WIFEXITED
#define WIFEXITED(status) (((status) & 0xff) == 0)
@ -106,106 +104,82 @@ static char privatehid[] = "@(#)private.h 7.53";
#define WEXITSTATUS(status) (((status) >> 8) & 0xff)
#endif /* !defined WEXITSTATUS */
#if HAVE_UNISTD_H - 0
#include "unistd.h" /* for F_OK and R_OK */
#endif /* HAVE_UNISTD_H - 0 */
#if HAVE_UNISTD_H
#include "unistd.h" /* for F_OK, R_OK, and other POSIX goodness */
#endif /* HAVE_UNISTD_H */
#if !(HAVE_UNISTD_H - 0)
#ifndef F_OK
#define F_OK 0
#endif /* !defined F_OK */
#ifndef R_OK
#define R_OK 4
#endif /* !defined R_OK */
#endif /* !(HAVE_UNISTD_H - 0) */
/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
#define is_digit(c) ((unsigned)(c) - '0' <= 9)
/*
** Define HAVE_STDINT_H's default value here, rather than at the
** start, since __GLIBC__'s value depends on previously-included
** files.
** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.)
*/
#ifndef HAVE_STDINT_H
#define HAVE_STDINT_H \
(199901 <= __STDC_VERSION__ || \
2 < (__GLIBC__ + (0 < __GLIBC_MINOR__)))
#endif /* !defined HAVE_STDINT_H */
#if HAVE_STDINT_H
#include "stdint.h"
#endif /* !HAVE_STDINT_H */
#ifndef INT_FAST64_MAX
/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX. */
#if defined LLONG_MAX || defined __LONG_LONG_MAX__
typedef long long int_fast64_t;
#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
#if (LONG_MAX >> 31) < 0xffffffff
Please use a compiler that supports a 64-bit integer type (or wider);
you may need to compile with "-DHAVE_STDINT_H".
#endif /* (LONG_MAX >> 31) < 0xffffffff */
typedef long int_fast64_t;
#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
#endif /* !defined INT_FAST64_MAX */
#ifndef INT32_MAX
#define INT32_MAX 0x7fffffff
#endif /* !defined INT32_MAX */
#ifndef INT32_MIN
#define INT32_MIN (-1 - INT32_MAX)
#endif /* !defined INT32_MIN */
/*
** Workarounds for compilers/systems.
*/
/*
** SunOS 4.1.1 cc lacks prototypes.
*/
#ifndef P
#ifdef __STDC__
#define P(x) x
#endif /* defined __STDC__ */
#ifndef __STDC__
#define P(x) ()
#endif /* !defined __STDC__ */
#endif /* !defined P */
/*
** 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.
** Some time.h implementations don't declare asctime_r.
** Others might define it as a macro.
** Fix the former without affecting the latter.
*/
#ifndef errno
extern int errno;
#endif /* !defined errno */
#ifndef asctime_r
extern char * asctime_r(struct tm const *, char *);
#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));
char * scheck P((const char *string, const char *format));
char * icalloc(int nelem, int elsize);
char * icatalloc(char * old, const char * new);
char * icpyalloc(const char * string);
char * imalloc(int n);
void * irealloc(void * pointer, int size);
void icfree(char * pointer);
void ifree(char * pointer);
const char * scheck(const char * string, const char * format);
/*
** Finally, some convenience items.
@ -227,6 +201,15 @@ char * scheck P((const char *string, const char *format));
#define TYPE_SIGNED(type) (((type) -1) < 0)
#endif /* !defined TYPE_SIGNED */
/*
** Since the definition of TYPE_INTEGRAL contains floating point numbers,
** it cannot be used in preprocessor directives.
*/
#ifndef TYPE_INTEGRAL
#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5)
#endif /* !defined TYPE_INTEGRAL */
#ifndef INT_STRLEN_MAXIMUM
/*
** 302 / 1000 is log10(2.0) rounded up.
@ -235,7 +218,8 @@ char * scheck P((const char *string, const char *format));
** add one more for a minus sign if the type is signed.
*/
#define INT_STRLEN_MAXIMUM(type) \
((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))
((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \
1 + TYPE_SIGNED(type))
#endif /* !defined INT_STRLEN_MAXIMUM */
/*
@ -269,11 +253,11 @@ char * scheck P((const char *string, const char *format));
*/
#ifndef _
#if HAVE_GETTEXT - 0
#if HAVE_GETTEXT
#define _(msgid) gettext(msgid)
#else /* !(HAVE_GETTEXT - 0) */
#else /* !HAVE_GETTEXT */
#define _(msgid) msgid
#endif /* !(HAVE_GETTEXT - 0) */
#endif /* !HAVE_GETTEXT */
#endif /* !defined _ */
#ifndef TZ_DOMAIN
@ -283,10 +267,30 @@ char * scheck P((const char *string, const char *format));
#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 *));
char *asctime_r(struct tm const *, char *);
char *ctime_r(time_t const *, char *);
#endif /* HAVE_INCOMPATIBLE_CTIME_R */
#ifndef YEARSPERREPEAT
#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */
#endif /* !defined YEARSPERREPEAT */
/*
** The Gregorian year averages 365.2425 days, which is 31556952 seconds.
*/
#ifndef AVGSECSPERYEAR
#define AVGSECSPERYEAR 31556952L
#endif /* !defined AVGSECSPERYEAR */
#ifndef SECSPERREPEAT
#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR)
#endif /* !defined SECSPERREPEAT */
#ifndef SECSPERREPEAT_BITS
#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */
#endif /* !defined SECSPERREPEAT_BITS */
/*
** UNIX was a registered trademark of The Open Group in 2003.
*/

View file

@ -1,6 +1,6 @@
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)strftime.c 7.64";
static char elsieid[] = "@(#)strftime.c 8.3";
/*
** Based on the UCB version with the ID appearing below.
** This is ANSIish only when "multibyte character == plain character".
@ -19,7 +19,7 @@ static char elsieid[] = "@(#)strftime.c 7.64";
** 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
** 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
@ -53,7 +53,7 @@ struct lc_time_T {
#ifdef LOCALE_HOME
#include "sys/stat.h"
static struct lc_time_T localebuf;
static struct lc_time_T * _loc P((void));
static struct lc_time_T * _loc(void);
#define Locale _loc()
#endif /* defined LOCALE_HOME */
#ifndef LOCALE_HOME
@ -91,7 +91,7 @@ static const struct lc_time_T C_time_locale = {
** 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"
** "%a %b %d %H:%M:%S %Y"
** is used by Solaris 2.3.
*/
"%a %b %e %T %Y",
@ -106,11 +106,11 @@ static const struct lc_time_T C_time_locale = {
"%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 *));
size_t strftime P((char *, size_t, const char *, const struct tm *));
static char * _add(const char *, char *, const char *);
static char * _conv(int, const char *, char *, const char *);
static char * _fmt(const char *, const struct tm *, char *, const char *,
int *);
static char * _yconv(int, int, int, int, char *, const char *);
extern char * tzname[];
@ -118,7 +118,6 @@ extern char * tzname[];
#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
@ -210,14 +209,14 @@ int * warnp;
** something completely different.
** (ado, 1993-05-24)
*/
pt = _conv((t->tm_year + TM_YEAR_BASE) / 100,
"%02d", pt, ptlim);
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);
pt = _fmt(Locale->c_fmt, t, pt, ptlim, &warn2);
if (warn2 == IN_ALL)
warn2 = IN_THIS;
if (warn2 > *warnp)
@ -266,7 +265,7 @@ int * warnp;
** 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
** strftime version 3.0. That is, "%k" and
** "%l" have been swapped.
** (ado, 1993-05-24)
*/
@ -286,7 +285,7 @@ int * warnp;
** _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
** strftime version 3.0. That is, "%k" and
** "%l" have been swapped.
** (ado, 1993-05-24)
*/
@ -361,7 +360,7 @@ int * warnp;
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
** 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)
@ -374,17 +373,19 @@ int * warnp;
** 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
** 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 + TM_YEAR_BASE;
year = t->tm_year;
base = TM_YEAR_BASE;
yday = t->tm_yday;
wday = t->tm_wday;
for ( ; ; ) {
@ -392,7 +393,7 @@ int * warnp;
int bot;
int top;
len = isleap(year) ?
len = isleap_sum(year, base) ?
DAYSPERLYEAR :
DAYSPERNYEAR;
/*
@ -411,7 +412,7 @@ int * warnp;
top += DAYSPERWEEK;
top += len;
if (yday >= top) {
++year;
++base;
w = 1;
break;
}
@ -420,26 +421,26 @@ int * warnp;
DAYSPERWEEK);
break;
}
--year;
yday += isleap(year) ?
--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;
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 = _conv(year % 100, "%02d",
pt = _yconv(year, base, 0, 1,
pt, ptlim);
} else pt = _conv(year, "%04d",
} else pt = _yconv(year, base, 1, 1,
pt, ptlim);
}
continue;
@ -477,11 +478,11 @@ int * warnp;
continue;
case 'y':
*warnp = IN_ALL;
pt = _conv((t->tm_year + TM_YEAR_BASE) % 100,
"%02d", pt, ptlim);
pt = _yconv(t->tm_year, TM_YEAR_BASE, 0, 1,
pt, ptlim);
continue;
case 'Y':
pt = _conv(t->tm_year + TM_YEAR_BASE, "%04d",
pt = _yconv(t->tm_year, TM_YEAR_BASE, 1, 1,
pt, ptlim);
continue;
case 'Z':
@ -512,12 +513,12 @@ int * warnp;
/*
** C99 says that the UTC offset must
** be computed by looking only at
** tm_isdst. This requirement is
** 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
** offset. Doing things correctly is
** tricky and requires disobeying C99;
** see GNU C strftime for details.
** For now, punt and conform to the
@ -546,9 +547,10 @@ int * warnp;
diff = -diff;
} else sign = "+";
pt = _add(sign, pt, ptlim);
diff /= 60;
pt = _conv((diff/60)*100 + diff%60,
"%04d", pt, ptlim);
diff /= SECSPERMIN;
diff = (diff / MINSPERHOUR) * 100 +
(diff % MINSPERHOUR);
pt = _conv(diff, "%04d", pt, ptlim);
}
continue;
case '+':
@ -558,7 +560,7 @@ int * warnp;
case '%':
/*
** X311J/88-090 (4.12.3.5): if conversion char is
** undefined, behavior is undefined. Print out the
** undefined, behavior is undefined. Print out the
** character itself as printf(3) also does.
*/
default:
@ -596,9 +598,50 @@ const char * const ptlim;
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))
_loc(void)
{
static const char locale_home[] = LOCALE_HOME;
static const char lc_time[] = "LC_TIME";
@ -640,7 +683,7 @@ _loc P((void))
** Slurp the locale file into the cache.
*/
namesize = strlen(name) + 1;
if (sizeof filename <
if (sizeof filename <
((sizeof locale_home) + namesize + (sizeof lc_time)))
goto no_locale;
oldsun = 0;
@ -663,7 +706,7 @@ _loc P((void))
goto bad_locale;
bufsize = namesize + st.st_size;
locale_buf = NULL;
lbuf = (lbuf == NULL) ? malloc(bufsize) : realloc(lbuf, bufsize);
lbuf = (lbuf == NULL) ? malloc(bufsize) : realloc(lbuf, bufsize);
if (lbuf == NULL)
goto bad_locale;
(void) strcpy(lbuf, name);

121
libc/stdtime/time2posix.3 Normal file
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 8.1
.\" This file is in the public domain, so clarified as of
.\" 1996-06-05 by Arthur David Olson.

152
libc/stdtime/tzfile.5 Normal file
View file

@ -0,0 +1,152 @@
.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 a character identifying the version of the file's format
(as of 2005, either an ASCII NUL or a '2')
followed by fifteen bytes containing zeroes 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 (with
.I tzh_typecnt
entries) 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.
.PP
For version-2-format time zone files,
the above header and data is followed by a second header and data,
identical in format except that
eight bytes are used for each transition time or leap second time.
After the second header and data comes a newline-enclosed,
POSIX-TZ-environment-variable-style string for use in handling instants
after the last transition time stored in the file
(with nothing between the newlines if there is no POSIX representation for
such instants).
.SH SEE ALSO
newctime(3)
.\" @(#)tzfile.5 8.2
.\" This file is in the public domain, so clarified as of
.\" 1996-06-05 by Arthur David Olson.

View file

@ -4,7 +4,7 @@
/*
** This file is in the public domain, so clarified as of
** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
** 1996-06-05 by Arthur David Olson.
*/
/*
@ -21,7 +21,7 @@
#ifndef lint
#ifndef NOID
static char tzfilehid[] = "@(#)tzfile.h 7.14";
static char tzfilehid[] = "@(#)tzfile.h 8.1";
#endif /* !defined NOID */
#endif /* !defined lint */
@ -48,8 +48,9 @@ static char tzfilehid[] = "@(#)tzfile.h 7.14";
#define TZ_MAGIC "TZif"
struct tzhead {
char tzh_magic[4]; /* TZ_MAGIC */
char tzh_reserved[16]; /* reserved for future use */
char tzh_magic[4]; /* TZ_MAGIC */
char tzh_version[1]; /* '\0' or '2' as of 2005 */
char tzh_reserved[15]; /* reserved--must be zero */
char tzh_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 */
@ -83,19 +84,23 @@ struct tzhead {
** assumed to be local time
*/
/*
** If tzh_version is '2' or greater, the above is followed by a second instance
** of tzhead and a second instance of the data in which each coded transition
** time uses 8 rather than 4 chars,
** then a POSIX-TZ-environment-variable-style string for use in handling
** instants after the last transition time stored in the file
** (with nothing between the newlines if there is no POSIX representation for
** such instants).
*/
/*
** In the current implementation, "tzset()" refuses to deal with files that
** exceed any of the limits below.
*/
#ifndef TZ_MAX_TIMES
/*
** 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
#define TZ_MAX_TIMES 1200
#endif /* !defined TZ_MAX_TIMES */
#ifndef TZ_MAX_TYPES
@ -105,7 +110,7 @@ struct tzhead {
#ifdef NOSOLAR
/*
** Must be at least 14 for Europe/Riga as of Jan 12 1995,
** as noted by Earl Chew <earl@hpato.aus.hp.com>.
** as noted by Earl Chew.
*/
#define TZ_MAX_TYPES 20 /* Maximum number of local time types */
#endif /* !defined NOSOLAR */
@ -156,33 +161,20 @@ struct tzhead {
#define EPOCH_YEAR 1970
#define EPOCH_WDAY TM_THURSDAY
/*
** Accurate only for the past couple of centuries;
** that will probably do.
*/
#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
#ifndef USG
/*
** Use of the underscored variants may cause problems if you move your code to
** certain System-V-based systems; for maximum portability, use the
** underscore-free variants. The underscored variants are provided for
** backward compatibility only; they may disappear from future versions of
** this file.
** 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 SECS_PER_MIN SECSPERMIN
#define MINS_PER_HOUR MINSPERHOUR
#define HOURS_PER_DAY HOURSPERDAY
#define DAYS_PER_WEEK DAYSPERWEEK
#define DAYS_PER_NYEAR DAYSPERNYEAR
#define DAYS_PER_LYEAR DAYSPERLYEAR
#define SECS_PER_HOUR SECSPERHOUR
#define SECS_PER_DAY SECSPERDAY
#define MONS_PER_YEAR MONSPERYEAR
#endif /* !defined USG */
#define isleap_sum(a, b) isleap((a) % 400 + (b) % 400)
#endif /* !defined TZFILE_H */

418
unused/Makefile Normal file
View file

@ -0,0 +1,418 @@
# @(#)Makefile 8.7
# 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.
# -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_STDINT_H=1 if you have a pre-C99 compiler with "stdint.h"
# -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-html401-19991224/
# The catalog file(s) to use when validating.
SGML_CATALOG_FILES= HTML4.cat
# 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
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 strftime.c asctime.c
DATEOBJS= date.o localtime.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 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 \
zoneinfo2tdf.pl
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
date: $(DATEOBJS)
$(CC) $(CFLAGS) date.o localtime.o asctime.o strftime.o \
$(LDLIBS) -lc -o $@
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:

159
unused/checktab.awk Normal file
View file

@ -0,0 +1,159 @@
# Check tz tables for consistency.
# @(#)checktab.awk 8.1
# 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
unused/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 8.1

127
unused/date.1.txt Normal file
View file

@ -0,0 +1,127 @@
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.

945
unused/date.c Normal file
View file

@ -0,0 +1,945 @@
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)date.c 8.4";
/*
** 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(const char *, int, time_t, time_t);
static int comptm(const struct tm *, const struct tm *);
static time_t convert(const char *, int, time_t);
static void display(const char *);
static void dogmt(void);
static void errensure(void);
static void iffy(time_t, time_t, const char *, const char *);
int main(int, char**);
static const char * nondigit(const char *);
static void oops(const char *);
static void reset(time_t, int);
static void timeout(FILE *, const char *, const struct tm *);
static void usage(void);
static void wildinput(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(void)
{
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
reset(const time_t newt, const int nflag)
{
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(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(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
convert(register const char * const value, const int dousg, const time_t t)
{
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
checkfinal(const char * const value,
const int didusg,
const time_t t,
const time_t oldnow)
{
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
iffy(const time_t thist, const time_t thatt,
const char * const value, const char * const reason)
{
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 */

BIN
unused/itca.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

239
unused/newctime.3 Normal file
View file

@ -0,0 +1,239 @@
.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; in this case it does not use a consistent
rule and may give a different answer when later
presented with the same argument.)
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 8.2

149
unused/newctime.3.txt Normal file
View file

@ -0,0 +1,149 @@
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; in this case it does not use a consistent
rule and may give a different answer when later presented
with the same argument.) 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.

230
unused/newstrftime.3 Normal file
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 8.1

149
unused/newstrftime.3.txt Normal file
View file

@ -0,0 +1,149 @@
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)

237
unused/newtzset.3 Normal file
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 8.1

153
unused/newtzset.3.txt Normal file
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)

83
unused/time2posix.3.txt Normal file
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

@ -1,23 +1,22 @@
<?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">
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content='text/html; charset="US-ASCII"' />
<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.53
@(#)tz-art.htm 8.11
</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 />
<hr>
<p>
Data on recordings of "Save That Time," Russ Long, Serrob Publishing, BMI:</p>
<table>
@ -83,7 +82,7 @@ Marion Simon, percussion</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 />
<hr>
<p>Also of note:</p>
<table>
<tr><td>Artist</td><td>Holly Cole Trio</td></tr>
@ -160,6 +159,99 @@ 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>Charles Gayle</td></tr>
<tr><td>CD</td><td>Time Zones</td></tr>
<tr><td>Copyright Date</td><td>2006</td></tr>
<tr><td>Label</td><td>Tompkins Square</td></tr>
<tr><td>ID</td><td>TSQ2839</td></tr>
<tr><td>Total Time</td><td>49:06</td></tr>
<tr><td>Personnel</td><td>Charles Gayle, piano</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=10:13rc28vw054a">AMG Rating</a></td><td>4.5 stars</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>The Get Up Kids</td></tr>
<tr><td>CD</td><td>Eudora</td></tr>
<tr><td>Copyright Date</td><td>2001</td></tr>
<tr><td>Label</td><td>Vagrant</td></tr>
<tr><td>ID</td><td>357</td></tr>
<tr><td>Total Time</td><td>65:12</td></tr>
<tr><td>Notes</td><td>Includes the song "Central Standard Time." Thanks to Colin Bowern for this information.</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&amp;sql=10:7ddovwvla9xk">AMG Rating</a></td><td>2.5 stars</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Coldplay</td></tr>
<tr><td>Song</td><td>Clocks</td></tr>
<tr><td>Copyright Date</td><td>2003</td></tr>
<tr><td>Label</td><td>Capitol Records</td></tr>
<tr><td>ID</td><td>52608</td></tr>
<tr><td>Total Time</td><td>4:13</td></tr>
<tr><td>Notes</td><td>Won the 2004 Record of the Year honor at the
Grammy Awards. Co-written and performed by Chris Martin,
great-great-grandson of DST inventor William Willett. The song's first
line is "Lights go out and I can't be saved".</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Irving Kahal and Harry Richman</td></tr>
<tr><td>Song</td><td>There Ought to be a Moonlight Saving Time</td></tr>
<tr><td>Copyright Date</td><td>1931</td>
<tr><td>Notes</td><td>This musical standard was a #1 hit for Guy Lombardo
in 1931, and was also performed by Maurice Chevalier, Blossom Dearie
and many others. The phrase "Moonlight saving time" also appears in
the 1995 country song "Not Enough Hours in the Night" written by Aaron
Barker, Kim Williams and Rob Harbin and performed by Doug
Supernaw.</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>The Microscopic Septet</td></tr>
<tr><td>CD</td><td>Lobster Leaps In</td></tr>
<tr><td>Copyright Date</td><td>2008</td></tr>
<tr><td>Label</td><td>Cuneiform</td></tr>
<tr><td>ID</td><td>272</td></tr>
<tr><td>Total Time</td><td>73:05</td></tr>
<tr><td>Notes</td><td>Includes the song "Twilight Time Zone."</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&sql=10:w9fpxzykldje">AMG Rating</a></td><td>3.5 stars</td></tr>
<tr><td>ADO Rating</td><td>2 stars</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>Bob Dylan</td></tr>
<tr><td>CD</td><td>The Time They Are A-Changin'</td></tr>
<tr><td>Copyright Date</td><td>1964</td></tr>
<tr><td>Label</td><td>Columbia</td></tr>
<tr><td>ID</td><td>CK-8905</td></tr>
<tr><td>Total Time</td><td>45:36</td></tr>
<tr><td><a href="http://www.allmusic.com/cg/amg.dll?p=amg&sql=10:gifqxqt5ld0e">AMG Rating</a></td><td>4.5 stars</td></tr>
<tr><td>ADO Rating</td><td>1.5 stars</td></tr>
<tr><td>Notes<td>The title song is also available on "Bob Dylan's Greatest Hits" and "The Essential Bob Dylan."</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>TV episode title</td><td>The Lost Hour</td>
<tr><td>TV series</td><td><em>Eerie, Indiana</em></td>
<tr><td>TV episode number</td><td>10</td>
<tr><td>Network</td><td>NBC</td>
<tr><td>Air date</td><td>1991-12-01</td>
<tr><td>Notes</td><td>Despite Indiana's then-lack of DST, Marshall changes his clock with unusual consequences.</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>TV episode title</td><td>Time Tunnel</td>
<tr><td>TV series</td><td><em>The Adventures of Pete &amp; Pete</em></td>
<tr><td>TV episode number</td><td>5, season 2</td>
<tr><td>Network</td><td>Nickelodeon</td>
<tr><td>Air date</td><td>1994-10-23</td>
<tr><td>Notes</td><td>The two Petes travel back in time an hour on the day that DST ends.</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>TV episode title</td><td>King-Size Homer</td>
<tr><td>TV series</td><td><em>The Simpsons</em></td>
<tr><td>TV episode number</td><td>135</td>
<tr><td>Network</td><td>Fox</td>
<tr><td>Air date</td><td>1995-11-05</td>
<tr><td>Notes</td><td>Homer, working from home, remarks "8:58, first
time I've ever been early for work. Except for all those daylight
savings days. Lousy farmers."</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>
@ -173,13 +265,40 @@ 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>Artist</td><td>Umberto Eco</td></tr>
<tr><td>Book</td><td>The Island of the Day Before
(L'isola del giorno prima)</td></tr>
<tr><td>Copyright Date</td><td>1994</td></tr>
<tr><td>Notes</td><td>
"...the story of a 17th century Italian nobleman trapped near an island
on the International Date Line. Time and time zones play an integral
part in the novel." (Paul Eggert, 2006-04-22)
</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>David Jebb</td></tr>
<tr><td>Book</td><td><a href="http://www.thethirteenthtimezone.com">
The Thirteenth Time Zone</a></td></tr>
<tr><td>Notes</td><td>
"It's fiction, but it's based on his experiences and travels." (Paul Eggert, 2006-04-22)
</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>Artist</td><td>John Dunning</td></tr>
<tr><td>Book</td><td><a
href="http://www.simonsays.com/content/book.cfm?sid=33&amp;pid=479719">Two
O'Clock, Eastern Wartime</a></td></tr>
<tr><td>Copyright Date</td><td>2001</td></tr>
<tr><td>Notes</td><td>
Mystery, history, daylight saving time, and old-time radio.
</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 on ordering is available at
<a href="http://www.videoflicks.com/VF2/1035/1035893.ihtml">http://www.videoflicks.com/VF2/1035/1035893.ihtml</a></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 />
<hr>
<ul>
<li>
An episode of "The Adventures of Superman" entitled "The Mysterious
@ -225,14 +344,19 @@ 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>
<li>
A private jet's mid-flight change of time zones distorts Alison Dubois'
premonition in the "We Had a Dream" episode of "Medium"
(originally aired 2007-02-28).
</li>
</ul>
<hr />
<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, wfitzgerald@ameritech.net)
as noted by Will Fitzerald)
</li>
<li>
"Good news."

648
unused/tz-link.htm Normal file
View file

@ -0,0 +1,648 @@
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<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="2007-12-26">
<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 8.18
</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 <a href="http://en.wikipedia.org/wiki/Public_domain">public-domain</a>
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 <a
href="http://en.wikipedia.org/wiki/Zoneinfo"><code>zoneinfo</code></a>)
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://netbsd.org/">NetBSD</a>,
<a href="http://openbsd.org/">OpenBSD</a>,
<a href="http://cygwin.com/">Cygwin</a>,
<a href="http://www.delorie.com/djgpp/"><abbr
title="DJ's GNU Programming Platform">DJGPP</abbr></a>,
<a href="http://ibm.com/aix">AIX</a>,
<a href="http://www.apple.com/macosx/">Mac OS X</a>,
<a href="http://h71000.www7.hp.com/">OpenVMS</a>,
<a href="http://oracle.com/database">Oracle Database</a>,
<a href="http://sun.com/software/solaris">Solaris</a>,
<a href="http://h30097.www3.hp.com/">Tru64</a>, and
<a href="http://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 <a
href="http://en.wikipedia.org/wiki/Unix_shell">shell</a> 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="http://news.gmane.org/gmane.comp.time.tz">browse recent
messages</a> sent to the mailing list, <a
href="mailto:tz-request@elsie.nci.nih.gov">subscribe</a> to it,
retrieve the <a
href="ftp://elsie.nci.nih.gov/pub/tzarchive.gz">full 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>
<p>
These are listed roughly in ascending order of complexity and fanciness.
</p>
<ul>
<li><a href="http://twiki.org/cgi-bin/xtra/tzdatepick.html">Date and Time Gateway</a>
lets you see the <code>TZ</code> values directly.</li>
<li><a
href="http://convertit.com/Go/ConvertIt/World_Time/Current_Time.ASP">Current
Time in 1000 Places</a> uses descriptions of the values.</li>
<li><a href="http://www.timezoneconverter.com/">Time Zone Converter</a>
uses a pulldown menu.</li>
<li><a href="http://home.tiscali.nl/~t876506/TZworld.html">Complete
timezone information for all countries</a> displays tables of DST rules.
<li><a href="http://timeanddate.com/worldclock/">The World Clock -
Time Zones</a> lets you sort zone names and convert times.</li>
<li><a href="http://daylight-savings-time.info/">Graphical Display of
Time Zones and Daylight Saving Times</a> shows a graph of time
difference versus time for any pair of locations.</li>
<li>The <a href="http://worldtimeengine.com/">World Time Engine</a>
also contains data about time zone boundaries; it supports queries via place
names and shows location maps.</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>, Internet <abbr title="Request For
Comments">RFC</abbr> 2445, published by the (now-concluded) <a
href="http://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://calconnect.org/">Calendaring and Scheduling
Consortium</a> is promoting further work in this area. <a
href="http://calconnect.org/publications/icalendartimezoneproblemsandrecommendationsv1.0.pdf">iCalendar
TIMEZONE Problems and Recommendations</a> offers guidelines and
recommendations for the use of VTIMEZONE and <code>tz</code>.</li>
<li><a href="http://calconnect.org/dstlinks.shtml">Extended Daylight
Saving Time Links, Advisories and Changes</a> lists vendor material on recent
daylight saving time changes.</li>
<li><a
href="http://calconnect.org/publications/timezoneregistryandservicerecommendationsv1.0.pdf">Timezone
Registry and Service Recommendations</a> discusses a
strategy for defining and deploying 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>
</ul>
<h2>Other <code>tz</code> compilers</h2>
<ul>
<li><a href="http://www.dachaplin.dsl.pipex.com/vzic/">Vzic iCalendar
Timezone Converter</a> describes a <a
href="http://en.wikipedia.org/wiki/C_%28programming_language%29">C</a>
program 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://sourceforge.net/projects/tzical">tziCal - tz
database conversion utility</a> is like Vzic, except for the <a
href="http://msdn.microsoft.com/netframework">.NET framework</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://icu-project.org/">International Components for
Unicode (<abbr>ICU</abbr>)</a> contains C/C++ and <a
href="http://en.wikipedia.org/wiki/Java_%28programming_language%29">Java</a>
libraries 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://pytz.sourceforge.net">PyTZ - Python Time
Zone Library</a> compiles <code>tz</code> source into
<a href="http://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://ruby-lang.org">Ruby</a>.
It is freely available under the <abbr
title="Massachusetts Institute of Technology">MIT</abbr> license.</li>
<li>The <a href="http://chronos-st.org/">Chronos Date/Time
Library</a> is a <a href="http://smalltalk.org">Smalltalk</a> class
library that compiles <code>tz</code> source into a <a
href="http://date-time-zone.com/">time zone repository</a> whose format
is either proprietary or an <a href="http://www.w3.org/XML/"><abbr
title="Extensible Markup Language">XML</abbr></a>-encoded
representation.</li>
<li>Starting with version 8.5, <a href="http://tcl.tk/">Tcl</a>
contains a developer-oriented parser that compiles <samp>tz</samp>
source into text files, along with a runtime that can read those
files. Tcl is freely available under a <abbr>BSD</abbr>-style
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://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>Tcl, mentioned above, also contains a
<code>tz</code> binary file reader.</li>
</ul>
<h2>Other <code>tz</code>-based time zone software</h2>
<ul>
<li><a href="http://stemhaus.com/firefox/foxclocks/">FoxClocks</a>
is an extension for <a
href="http://developer.mozilla.org/en/docs/Toolkit_API">Mozilla
Toolkit</a> applications like <a
href="http://mozilla.com/firefox">Firefox</a>, <a
href="http://mozilla.com/thunderbird">Thunderbird</a>, and
<a
href="http://www.mozilla.org/projects/calendar/sunbird/">Sunbird</a>.
It displays multiple clocks in the application window, and has a mapping
interface to <a href="http://earth.google.com/">Google Earth</a>.
It is freely available under the <abbr>GPL</abbr>.</li>
<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://codeplex.com/publicdomain">PublicDomain</a>
has a copy of a recent <code>tz</code> database, accessed via a <a
href="http://en.wikipedia.org/wiki/C_Sharp">C#</a> library. As its
name suggests, it is in the public domain. Only current time stamps
are well supported; historical data are compiled into the runtime but
are not easily accessible.</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://kimmo.suominen.com/sw/timezone/">Time Zone</a> is
a <a href="http://wordpress.org/">WordPress</a> plugin. It is freely
available under a <abbr>BSD</abbr>-style license.</li>
<li><a
href="http://veladg.com/velaterra.html">VelaTerra</a> is
a Mac OS X program. Its developers
<a href="http://veladg.com/tzoffer.html">offer free
licenses</a> to <code>tz</code> contributors.</li>
<li><a
href="http://worldtimeexplorer.com/">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">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://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://iata.org/ps/publications/SSIM.htm">Standard
Schedules Information Manual</a> of the
<a href="http://iata.org/index.htm">International Air Transport
Association</a>
gives current time zone rules for airports served by commercial aviation.</li>
<li>Some Microsoft Windows versions contain time zone information in
an undocumented format, with IDs that can be mapped to <code>TZ</code>
values using the <a
href="http://unicode.org/cldr/data/diff/supplemental/windows_tzid.html">Windows
&rarr; Tzid table</a> maintained by the <abbr
title="Common Locale Data Repository">CLDR</abbr> data mentioned
below.</li>
</ul>
<h2>Maps</h2>
<ul>
<li>The <a href="https://www.cia.gov/">United States Central
Intelligence Agency (<abbr
title="Central Intelligence Agency">CIA</abbr>)</a> publishes a <a
href="https://www.cia.gov/library/publications/the-world-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://efele.net/maps/tz/us/">A map of the TZ timezones in
the US</a> contains a <a
href="http://en.wikipedia.org/wiki/Shapefile">shapefile</a> of the
<code>tz</code> regions in the US.</li>
<li><a href="http://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.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>
<li>A ship within the <a
href="http://en.wikipedia.org/wiki/Territorial_waters">territorial
waters</a> of any nation uses that nation's time. In international
waters, time zone boundaries are meridians 15&deg; apart, except that
UTC&minus;12 and UTC+12 are each 7.5&deg; wide and are separated by
the 180&deg; meridian (not by the International Date Line, which is
for land and territorial waters only). A captain can change ship's
clocks any time after entering a new time zone; midnight changes are
common.</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://energy.ca.gov/daylightsaving.html">Saving Time,
Saving Energy</a> discusses a primary justification for <abbr>DST</abbr>.</li>
<li><a href="http://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://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 Parliamentary Library has commissioned <a
href="http://www.aph.gov.au/LIBRARY/Pubs/rn/2006-07/07rn13.pdf">research
note on daylight saving time in Australia</a>.
The Bureau of Meteorology 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>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/time_services/daylight_saving_e.html">Time
Zones &amp; Daylight Saving Time</a>.</dd>
<dt>Chile</dt>
<dd>The Chilean Hydrographic and Oceanographic Service publishes a <a
href="http://www.horaoficial.cl/horaof.htm" hreflang="es"> history of
official time (in Spanish)</a>.</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://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://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/server.php?show=ConWebDoc.2714">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="ftp://ftp.rfc-editor.org/in-notes/rfc4833.txt">Timezone
Options for <abbr title="Dynamic Host Configuration Protocol">DHCP</abbr></a>
(Internet <abbr>RFC</abbr> 4833)
specifies a <a
href="http://www.dhcp.org/">DHCP</a> option for a server to configure
a client's time zone and daylight saving settings automatically.</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://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://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://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://six.pairlist.net/mailman/listinfo/leapsecs">Leap
Second Discussion List</a> covers <a
href="http://gauss.gge.unb.ca/papers.pdf/gpsworld.november99.pdf">McCarthy
and Klepczynski's proposal to discontinue leap seconds</a>,
discussed further in
<a href="http://www.cl.cam.ac.uk/~mgk25/time/metrologia-leapsecond.pdf">The
leap second: its history and possible future</a>.
The (now disbanded) <a href="http://members.aas.org/comms/leap.cfm"><abbr
title="American Astronomical Society">AAS</abbr> Leap Second
Committee</a> has solicited input on this proposal.
<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 XML data.</li>
<li>
<a href="ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt">Internet
Message Format</a> (Internet <abbr>RFC</abbr> 2822) &sect;3.3
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">Date and Time
on the Internet: Timestamps</a> (Internet <abbr>RFC</abbr> 3339)
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://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>The <a
href="http://unicode.org/cldr/">Unicode Common Locale Data Repository
(<abbr>CLDR</abbr>) Project</a> has localizations for time zone names,
abbreviations, identifiers, and formats. For example, it contains
French translations for "Eastern European Summer Time", "<abbr
title="Eastern European Summer Time">EEST</abbr>", and
"Bucharest". <a
href="http://unicode.org/cldr/data/charts/by_type/names.metazone.html">By-Type
Chart: names.metazone</a> shows these values for many locales.
<abbr>ICU</abbr> contains a mechanism for using this data.</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://www.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>

106
unused/tzfile.5.txt Normal file
View file

@ -0,0 +1,106 @@
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 a character identifying the
version of the file's format (as of 2005, either an ASCII
NUL or a '2') followed by fifteen bytes containing zeroes
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 (with tzh_typecnt entries) 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.
For version-2-format time zone files, the above header and
data is followed by a second header and data, identical in
format except that eight bytes are used for each transition
time or leap second time. After the second header and data
comes a newline-enclosed, POSIX-TZ-environment-variable-
style string for use in handling instants after the last
transition time stored in the file (with nothing between the
newlines if there is no POSIX representation for such
instants).
SEE ALSO
newctime(3)

41
unused/tzselect.8 Normal file
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 8.1

41
unused/tzselect.8.txt Normal file
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)

323
unused/tzselect.ksh Normal file
View file

@ -0,0 +1,323 @@
#! /bin/ksh
VERSION='@(#)tzselect.ksh 8.2'
# 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
}
if [ "$1" = "--help" ]; then
cat <<EOF
Usage: tzselect
Select a time zone interactively.
Report bugs to tz@elsie.nci.nih.gov.
EOF
exit 0
elif [ "$1" = "--version" ]; then
cat <<EOF
tzselect $VERSION
EOF
exit 0
fi
# 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
unused/usno1988 Normal file
View file

@ -0,0 +1,111 @@
# @(#)usno1988 8.1
#
# 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
unused/usno1989 Normal file
View file

@ -0,0 +1,452 @@
# @(#)usno1989 8.1
#
# 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
unused/usno1989a Normal file
View file

@ -0,0 +1,452 @@
# @(#)usno1989a 8.1
#
# 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
unused/usno1995 Normal file
View file

@ -0,0 +1,326 @@
# @(#)usno1995 8.1
#
# 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
unused/usno1997 Normal file
View file

@ -0,0 +1,327 @@
# @(#)usno1997 8.1
#
# 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
unused/usno1998 Normal file
View file

@ -0,0 +1,327 @@
# @(#)usno1998 8.1
#
# 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...

29
unused/workman.sh Normal file
View file

@ -0,0 +1,29 @@
#! /bin/sh
# @(#)workman.sh 8.1
# 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;
}
'

43
unused/zdump.8.txt Normal file
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)

308
unused/zic.8.txt Normal file
View file

@ -0,0 +1,308 @@
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 [UNTILYEAR [MONTH [DAY [TIME]]]]
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.
UNTILYEAR [MONTH [DAY [TIME]]]
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 fields of a rule; trailing fields
can be omitted, and default to the earliest possible
value for the missing fields.
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" information in the previous
line in the file used by the previous line.
Continuation lines may contain "until" information,
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.
EXTENDED EXAMPLE
Here is an extended example of zic input, intended to
illustrate many of its features.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Swiss 1940 only - Nov 2 0:00 1:00 S
Rule Swiss 1940 only - Dec 31 0:00 0 -
Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 S
Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0
Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S
Rule EU 1977 only - Sep lastSun 1:00u 0 -
Rule EU 1978 only - Oct 1 1:00u 0 -
Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
Rule EU 1996 max - Oct lastSun 1:00u 0 -
# Zone NAME GMTOFF RULES FORMAT UNTIL
Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12
0:29:44 - BMT 1894 Jun
1:00 Swiss CE%sT 1981
1:00 EU CE%sT
Link Europe/Zurich Switzerland
In this example, the zone is named Europe/Zurich but it has
an alias as Switzerland. Zurich was 34 minutes and 8
seconds west of GMT until 1848-09-12 at 00:00, when the
offset changed to 29 minutes and 44 seconds. After
1894-06-01 at 00:00 Swiss daylight saving rules (defined
with lines beginning with "Rule Swiss") apply, and the GMT
offset became one hour. From 1981 to the present, EU
daylight saving rules have applied, and the UTC offset has
remained at one hour.
In 1940, daylight saving time applied from November 2 at
00:00 to December 31 at 00:00. In 1941 and 1942, daylight
saving time applied from the first Sunday in May at 02:00 to
the first Sunday in October at 00:00. The pre-1981 EU
daylight-saving rules have no effect here, but are included
for completeness. Since 1981, daylight saving has begun on
the last Sunday in March at 01:00 UTC. Until 1995 it ended
the last Sunday in September at 01:00 UTC, but this changed
to the last Sunday in October starting in 1996.
For purposes of display, "LMT" and "BMT" were initially
used, respectively. Since Swiss rules and later EU rules
were applied, the display name for the timezone has been CET
for standard time and CEST for daylight saving 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)

54
unused/zoneinfo2tdf.pl Executable file
View file

@ -0,0 +1,54 @@
#! /usr/bin/perl -w
# @(#)zoneinfo2tdf.pl 8.2
# Courtesy Ken Pizzini.
use strict;
#This file released to the public domain.
#Note: error checking is poor --- only trust the output if the input
#has been checked by zic.
my $contZone = '';
while (<>) {
my $origline = $_;
my @fields = ();
while (s/^\s*((?:"[^"]*"|[^\s#])+)//) {
push @fields, $1;
}
next unless @fields;
my $type = lc($fields[0]);
if ($contZone) {
@fields >= 3 or warn "bad continuation line";
unshift @fields, '+', $contZone;
$type = 'zone';
}
$contZone = '';
if ($type eq 'zone') {
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
my $nfields = @fields;
$nfields >= 5 or warn "bad zone line";
if ($nfields > 6) {
#this splice is optional, depending on one's preference
#(one big date-time field, or componentized date and time):
splice(@fields, 5, $nfields-5, "@fields[5..$nfields-1]");
}
$contZone = $fields[1] if @fields > 5;
} elsif ($type eq 'rule') {
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@fields == 10 or warn "bad rule line";
} elsif ($type eq 'link') {
# Link LINK-FROM LINK-TO
@fields == 3 or warn "bad link line";
} elsif ($type eq 'leap') {
# Leap YEAR MONTH DAY HH:MM:SS CORR R/S
@fields == 7 or warn "bad leap line";
} else {
warn "Fubar at input line $.: $origline";
}
print join("\t", @fields), "\n";
}

View file

@ -1,81 +0,0 @@
@(#)Music 7.4
Data on recordings of "Save That Time," Russ Long, Serrob Publishing, BMI:
--------------------------------------------------------------------------
Artist: Karrin Allyson
CD: I Didn't Know About You
Copyright Date: 1993
Label: Concord Jazz, Inc.
ID: CCD-4543
Track Time: 3:44
Personnel: Karrin Allyson, vocal
Russ Long, piano
Gerald Spaits, bass
Todd Strait, drums
Notes: CD notes "additional lyric by Karrin Allyson;
arranged by Russ Long and Karrin Allyson"
Rating: 1 star
--------------------------------------------------------------------------
Artist: Kevin Mahogany
CD: Double Rainbow
Copyright Date: 1993
Label: Enja Records
ID: ENJ-7097 2
Track Time: 6:27
Personnel: Kevin Mahogany, vocal
Kenny Barron, piano
Ray Drummond, bss
Ralph Moore, tenor saxophone
Lewis Nash, drums
Rating: 1.5 stars
--------------------------------------------------------------------------
Artist: Joe Williams
CD: Here's to Life
Copyright Date: 1994
Label: Telarc International Corporation
ID: CD-83357
Track Time: 3:58
Personnel: Joe Williams, vocal
The Robert Farnon [39 piece] Orchestra
Rating: black dot
--------------------------------------------------------------------------
Artist: Charles Fambrough
CD: Keeper of the Spirit
Copyright Date: 1995
Label: AudioQuest Music
ID: AQ-CD1033
Track Time: 7:07
Personnel: Charles Fambrough, bass
Joel Levine, tenor recorder
Edward Simon, piano
Lenny White, drums
Marion Simon, percussion
Rating: 2 stars
==========================================================================
Also of note:
Artist: Milt Hinton
CD: Old Man Time
Date: 1993
Label: Chiaroscuro
ID: CR(D) 310
Total Time: 149:38 (two CDs)
Personnel: Milt Hinton, bass
Doc Cheatham, Dizzy Gillespie, Clark Terry, trumpet
Al Grey, trombone
Eddier 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
Notes: 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
Rating: 3 stars

View file

@ -1,4 +1,4 @@
@(#)README 7.11
@(#)README 8.2
"What time is it?" -- Richard Deacon as The King
"Any time you want it to be." -- Frank Baxter as The Scientist
@ -52,8 +52,10 @@ substituting your desired installation directory for "$HOME/tzdir":
To use the new functions, use a "-ltz" option when compiling or linking.
Historical local time information has been included here not because it
is particularly useful, but rather to:
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
@ -63,7 +65,9 @@ is particularly useful, but rather to:
system.
The information in the time zone data files is by no means authoritative;
if you know that the rules are different from those in a file, by all means
the files currently do not even attempt to cover 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!

View file

@ -1,4 +1,4 @@
@(#)Theory 7.15
@(#)Theory 8.2
----- Outline -----
@ -12,26 +12,27 @@
----- Time and date functions -----
These time and date functions are upwards compatible with POSIX.1,
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.1 is:
As of this writing, the current edition of POSIX is:
Information technology --Portable Operating System Interface (POSIX (R))
-- Part 1: System Application Program Interface (API) [C Language]
ISO/IEC 9945-1:1996
ANSI/IEEE Std 1003.1, 1996 Edition
1996-07-12
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.1 has the following properties and limitations.
POSIX has the following properties and limitations.
* In POSIX.1, time display in a process is controlled by the
environment variable TZ. Unfortunately, the POSIX.1 TZ string takes
* 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.1 TZ strings can't deal with other (for example, Israeli)
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.1 TZ string takes the following form:
The POSIX TZ string takes the following form:
stdoffset[dst[offset],date[/time],date[/time]]
@ -40,6 +41,9 @@ POSIX.1 has the following properties and limitations.
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
@ -62,14 +66,25 @@ POSIX.1 has the following properties and limitations.
and `5' stands for the last week in which day d appears
(which may be either the 4th or 5th week).
* In POSIX.1, when a TZ value like "EST5EDT" is parsed,
typically the current US DST rules are used,
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.1, there's no tamper-proof way for a process to learn the
* 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
@ -78,9 +93,9 @@ POSIX.1 has the following properties and limitations.
daylight saving time shifts--as might be required to limit phone
calls to off-peak hours.)
* POSIX.1 requires that systems ignore leap seconds.
* POSIX requires that systems ignore leap seconds.
These are the extensions that have been made to the POSIX.1 functions:
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
@ -108,7 +123,7 @@ These are the extensions that have been made to the POSIX.1 functions:
* 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.1, where the elements
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
@ -131,8 +146,7 @@ These are the extensions that have been made to the POSIX.1 functions:
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
(bww@k.cs.cmu.edu).
* These functions can account for leap seconds, thanks to Bradley White.
Points of interest to folks with other systems:
@ -173,9 +187,9 @@ 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.1, to ensure its broad
acceptability. If more powerful time conversion functions can be standardized,
so much the better.
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 -----
@ -228,6 +242,8 @@ in decreasing order of importance:
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.
@ -263,7 +279,8 @@ in decreasing order of importance:
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.
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.
@ -277,7 +294,7 @@ 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.1.
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:
@ -292,17 +309,16 @@ in decreasing order of importance:
preferred "ChST", so the rule has been relaxed.
This rule guarantees that all abbreviations could have
been specified by a POSIX.1 TZ string. POSIX.1
been specified by a POSIX TZ string. POSIX
requires at least three characters for an
abbreviation. POSIX.1-1996 says that an abbreviation
abbreviation. POSIX through 2000 says that an abbreviation
cannot start with ':', and cannot contain ',', '-',
'+', NUL, or a digit. Draft 7 of POSIX 1003.1-200x
changes this rule to say that an abbreviation can
contain only '-', '+', and alphanumeric characters in
the current locale. To be portable to both sets of
'+', 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, as these are the only letters that are
alphabetic in all locales.
letters.
Use abbreviations that are in common use among English-speakers,
e.g. `EST' for Eastern Standard Time in North America.
@ -328,8 +344,9 @@ in decreasing order of importance:
and then append `T', `ST', etc. as before;
e.g. `VLAST' for VLAdivostok Summer Time.
Use "zzz" for locations while uninhabited. The mnemonic is that
these locations are, in some sense, asleep.
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
@ -343,10 +360,10 @@ abbreviations like `EST'; this avoids the ambiguity.
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 Nachum Dershowitz and Edward M. Reingold,
<a href="http://emr.cs.uiuc.edu/home/reingold/calendar-book/index.shtml">
Calendrical Calculations
</a>, Cambridge University Press (1997). Other information and
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.
@ -359,7 +376,7 @@ and (in Paris only) 1871-05-06 through 1871-05-23.
Russia
From Chris Carrier <72157.3334@CompuServe.COM> (1996-12-02):
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
@ -374,7 +391,7 @@ 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
Message-ID: <Petteri.Sulonen-1401991626030001@lapin-kulta.in.helsinki.fi>
...
If your source is correct, how come documents between 1929 -- 1940 were
still dated using the conventional, Gregorian calendar?
@ -387,7 +404,7 @@ Executive Committee of the Supreme Soviet, if you like.
Sweden (and Finland)
From: msb@sq.com (Mark Brader)
From: Mark Brader
<a href="news:1996Jul6.012937.29190@sq.com">
Subject: Re: Gregorian reform -- a part of locale?
</a>
@ -415,11 +432,11 @@ kalendervasen" by Lars-Olof Lode'n (no date was given).)
Grotefend's data
From: "Michael Palmer" <mpalmer@netcom.com> [with one obvious typo fixed]
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
Message-ID: <199902091032.CAA09644@netcom10.netcom.com>
...
The following is a(n incomplete) listing, arranged chronologically, of
European states, with the date they converted from the Julian to the
@ -546,7 +563,7 @@ 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-03-15).
<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.

View file

@ -1,6 +1,11 @@
/*
** This file is in the public domain, so clarified as of
** 2006-07-17 by Arthur David Olson.
*/
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)ialloc.c 8.29";
static char elsieid[] = "@(#)ialloc.c 8.30";
#endif /* !defined NOID */
#endif /* !defined lint */

View file

@ -4,7 +4,7 @@
/*
** This file is in the public domain, so clarified as of
** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
** 1996-06-05 by Arthur David Olson.
*/
/*
@ -21,10 +21,12 @@
#ifndef lint
#ifndef NOID
static char privatehid[] = "@(#)private.h 7.53";
static char privatehid[] = "@(#)private.h 8.6";
#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'.
@ -46,10 +48,6 @@ static char privatehid[] = "@(#)private.h 7.53";
#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 */
@ -87,17 +85,17 @@ static char privatehid[] = "@(#)private.h 7.53";
#include "stdio.h"
#include "errno.h"
#include "string.h"
#include "limits.h" /* for CHAR_BIT */
#include "limits.h" /* for CHAR_BIT et al. */
#include "time.h"
#include "stdlib.h"
#if HAVE_GETTEXT - 0
#if HAVE_GETTEXT
#include "libintl.h"
#endif /* HAVE_GETTEXT - 0 */
#endif /* HAVE_GETTEXT */
#if HAVE_SYS_WAIT_H - 0
#if HAVE_SYS_WAIT_H
#include <sys/wait.h> /* for WIFEXITED and WEXITSTATUS */
#endif /* HAVE_SYS_WAIT_H - 0 */
#endif /* HAVE_SYS_WAIT_H */
#ifndef WIFEXITED
#define WIFEXITED(status) (((status) & 0xff) == 0)
@ -106,106 +104,82 @@ static char privatehid[] = "@(#)private.h 7.53";
#define WEXITSTATUS(status) (((status) >> 8) & 0xff)
#endif /* !defined WEXITSTATUS */
#if HAVE_UNISTD_H - 0
#include "unistd.h" /* for F_OK and R_OK */
#endif /* HAVE_UNISTD_H - 0 */
#if HAVE_UNISTD_H
#include "unistd.h" /* for F_OK, R_OK, and other POSIX goodness */
#endif /* HAVE_UNISTD_H */
#if !(HAVE_UNISTD_H - 0)
#ifndef F_OK
#define F_OK 0
#endif /* !defined F_OK */
#ifndef R_OK
#define R_OK 4
#endif /* !defined R_OK */
#endif /* !(HAVE_UNISTD_H - 0) */
/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
#define is_digit(c) ((unsigned)(c) - '0' <= 9)
/*
** Define HAVE_STDINT_H's default value here, rather than at the
** start, since __GLIBC__'s value depends on previously-included
** files.
** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.)
*/
#ifndef HAVE_STDINT_H
#define HAVE_STDINT_H \
(199901 <= __STDC_VERSION__ || \
2 < (__GLIBC__ + (0 < __GLIBC_MINOR__)))
#endif /* !defined HAVE_STDINT_H */
#if HAVE_STDINT_H
#include "stdint.h"
#endif /* !HAVE_STDINT_H */
#ifndef INT_FAST64_MAX
/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX. */
#if defined LLONG_MAX || defined __LONG_LONG_MAX__
typedef long long int_fast64_t;
#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
#if (LONG_MAX >> 31) < 0xffffffff
Please use a compiler that supports a 64-bit integer type (or wider);
you may need to compile with "-DHAVE_STDINT_H".
#endif /* (LONG_MAX >> 31) < 0xffffffff */
typedef long int_fast64_t;
#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
#endif /* !defined INT_FAST64_MAX */
#ifndef INT32_MAX
#define INT32_MAX 0x7fffffff
#endif /* !defined INT32_MAX */
#ifndef INT32_MIN
#define INT32_MIN (-1 - INT32_MAX)
#endif /* !defined INT32_MIN */
/*
** Workarounds for compilers/systems.
*/
/*
** SunOS 4.1.1 cc lacks prototypes.
*/
#ifndef P
#ifdef __STDC__
#define P(x) x
#endif /* defined __STDC__ */
#ifndef __STDC__
#define P(x) ()
#endif /* !defined __STDC__ */
#endif /* !defined P */
/*
** 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.
** Some time.h implementations don't declare asctime_r.
** Others might define it as a macro.
** Fix the former without affecting the latter.
*/
#ifndef errno
extern int errno;
#endif /* !defined errno */
#ifndef asctime_r
extern char * asctime_r(struct tm const *, char *);
#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));
char * scheck P((const char *string, const char *format));
char * icalloc(int nelem, int elsize);
char * icatalloc(char * old, const char * new);
char * icpyalloc(const char * string);
char * imalloc(int n);
void * irealloc(void * pointer, int size);
void icfree(char * pointer);
void ifree(char * pointer);
const char * scheck(const char * string, const char * format);
/*
** Finally, some convenience items.
@ -227,6 +201,15 @@ char * scheck P((const char *string, const char *format));
#define TYPE_SIGNED(type) (((type) -1) < 0)
#endif /* !defined TYPE_SIGNED */
/*
** Since the definition of TYPE_INTEGRAL contains floating point numbers,
** it cannot be used in preprocessor directives.
*/
#ifndef TYPE_INTEGRAL
#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5)
#endif /* !defined TYPE_INTEGRAL */
#ifndef INT_STRLEN_MAXIMUM
/*
** 302 / 1000 is log10(2.0) rounded up.
@ -235,7 +218,8 @@ char * scheck P((const char *string, const char *format));
** add one more for a minus sign if the type is signed.
*/
#define INT_STRLEN_MAXIMUM(type) \
((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))
((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \
1 + TYPE_SIGNED(type))
#endif /* !defined INT_STRLEN_MAXIMUM */
/*
@ -269,11 +253,11 @@ char * scheck P((const char *string, const char *format));
*/
#ifndef _
#if HAVE_GETTEXT - 0
#if HAVE_GETTEXT
#define _(msgid) gettext(msgid)
#else /* !(HAVE_GETTEXT - 0) */
#else /* !HAVE_GETTEXT */
#define _(msgid) msgid
#endif /* !(HAVE_GETTEXT - 0) */
#endif /* !HAVE_GETTEXT */
#endif /* !defined _ */
#ifndef TZ_DOMAIN
@ -283,10 +267,30 @@ char * scheck P((const char *string, const char *format));
#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 *));
char *asctime_r(struct tm const *, char *);
char *ctime_r(time_t const *, char *);
#endif /* HAVE_INCOMPATIBLE_CTIME_R */
#ifndef YEARSPERREPEAT
#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */
#endif /* !defined YEARSPERREPEAT */
/*
** The Gregorian year averages 365.2425 days, which is 31556952 seconds.
*/
#ifndef AVGSECSPERYEAR
#define AVGSECSPERYEAR 31556952L
#endif /* !defined AVGSECSPERYEAR */
#ifndef SECSPERREPEAT
#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR)
#endif /* !defined SECSPERREPEAT */
#ifndef SECSPERREPEAT_BITS
#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */
#endif /* !defined SECSPERREPEAT_BITS */
/*
** UNIX was a registered trademark of The Open Group in 2003.
*/

View file

@ -1,6 +1,11 @@
/*
** This file is in the public domain, so clarified as of
** 2006-07-17 by Arthur David Olson.
*/
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)scheck.c 8.15";
static char elsieid[] = "@(#)scheck.c 8.19";
#endif /* !defined lint */
#endif /* !defined NOID */
@ -8,7 +13,7 @@ static char elsieid[] = "@(#)scheck.c 8.15";
#include "private.h"
char *
const char *
scheck(string, format)
const char * const string;
const char * const format;
@ -17,11 +22,10 @@ const char * const format;
register const char * fp;
register char * tp;
register int c;
register char * result;
register const char * result;
char dummy;
static char nada;
result = &nada;
result = "";
if (string == NULL || format == NULL)
return result;
fbuf = imalloc((int) (2 * strlen(format) + 4));

View file

@ -1,443 +0,0 @@
<?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="2004-05-24" />
<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.42
</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 UTC offsets and daylight-saving 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 GNU C Library</a> used in
<a href="http://www.linux.org/">GNU/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/">DJGPP</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://wwws.sun.com/software/solaris/">Solaris</a>,
<a href="http://www.tru64unix.compaq.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 US eastern time zone;
<code>America/Indianapolis</code> represents most of Indiana, which
uses eastern time without daylight saving time (DST);
<code>America/Detroit</code> represents most of Michigan, which uses
eastern time but with different DST rules in 1975;
and other entries represent smaller regions like Starke County,
Kentucky, which switched from central to eastern time in 1991.
To use the database, 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/">FTP 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 GNU/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>.</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/tzdate">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.hilink.com.au/times/">Local Times Around the
World</a></li>
<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.holidayfestival.com/">The Worldwide Holiday
&amp; Festival Site</a> lists DST-related clock changes along with
holidays.</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 <a
href="http://www.ietf.org/html.charters/calsch-charter.html">IETF
Calendaring and Scheduling Working Group (calsch)</a> covers time zone
data; see its VTIMEZONE calendar component.</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/">RDF</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 by <a
href="http://www.w3.org/People/Berners-Lee/">Tim Berners-Lee</a>.</li>
<li><a
href="http://www.calsch.org/ietf/archives/draft-ietf-calsch-many-xcal-02.txt">XCal</a>
was a draft <a href="http://www.w3.org/XML/">XML</a> document type
definition that corresponded to iCalendar.</li>
</ul>
<h2>Other <code>tz</code> compilers</h2>
<ul>
<li><a href="http://www.dachaplin.dsl.pipex.com/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">GNU
General Public License (GPL)</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 GPL and the Perl <a
href="http://www.perl.com/language/misc/Artistic.html">Artistic
License</a>. 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://oss.software.ibm.com/icu/">International Components for
Unicode (ICU)</a> contains a C/C++ library for internationalization that
has a compiler from <samp>tz</samp> source into an ICU-specific format.
ICU is freely available under a BSD-style license.</li>
<li><a href="http://joda-time.sourceforge.net/">Joda Time - Java date
and time API</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 BSD-style license.</li>
</ul>
<h2>Other <code>tz</code> binary file readers</h2>
<ul>
<li>The <a href="http://www.gnu.org/software/libc/">GNU 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">
GNU Lesser General Public License (LGPL)</a>,
and is widely used in GNU/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 GNU LGPL.</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 <a
href="http://www.python.org/">Python</a>. It is freely available
under a BSD-style license.</li>
</ul>
<h2>Other <code>tz</code>-based time zone conversion software</h2>
<ul>
<li><a href="http://java.sun.com/">Sun Java</a> releases since 1.4
contain a copy of a recent <samp>tz</samp> database in a Java-specific
format.</li>
<li><a
href="http://www1.tip.nl/~t876506/AboutTimeZonesHC.html">HyperCard
time zones calculator</a> is a HyperCard stack.</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-bin/atlw3/aq.cgi?lang=e">Atlas Query
- Astrodienst</a> is Astrodienst's Web version of Shanks's
excellent time zone history atlases published in both <a
href="http://astrocom.com/software/pcatlas.php">computer</a> and <a
href="http://astrocom.com/books/xrefa.php#SHANKS">book</a> form 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 US Naval Observatory
(USNO), used as the source
for the <code>usno*</code> files in the <code>tz</code> distribution.</li>
<li><a href="http://www.airportcitycodes.com/aaa/">Airlines, Airplanes
and Airports</a> lists current standard times for thousands of
airports around the world. This seems to be derived from
the <a href="http://www.iata.org/sked/publications/">Standard
Schedules Information Manual (SSIM)</a> of the
the <a href="http://www.iata.org/">International Air Transport
Association</a>,
which gives current time zone rules for
all the airports served by commercial aviation.</li>
</ul>
<h2>Maps</h2>
<ul>
<li>The <a href="http://www.odci.gov/">United States Central
Intelligence Agency (CIA)</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/">World timezones map with
current time</a>
has several fancy time zone maps; it covers Russia particularly well.
The maps' pictorial quality is not quite as good as the CIA's
but the maps are more up to date.</li>
</ul>
<h2>Time zone boundaries</h2>
<ul>
<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
GIS Data</a> includes a Manifold-format map of world time zone
boundaries distributed under the GPL. The GeoCommunity's <a
href="http://software.geocomm.com/data/intl_timezones.html">International
Time Zones</a> publishes the same data in other formats.</li>
<li>The US Geological Survey's National Atlas of the United States
publishes the <a href="http://www.nationalatlas.gov/timeznm.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/time">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 and dates</a>
is an overall history of DST.</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 Community Relations Division of the New South Wales (NSW)
Attorney General's Department maintains a <a
href="http://www.lawlink.nsw.gov.au/crd.nsf/pages/time2">history of
daylight saving in NSW</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/time_services/daylight_savings_e.html">Time
Zones and 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.astrologyhouse.co.nz/timechanges.htm">Time Changes in
New Zealand</a> has more details.</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/litwebbin/purl.cgi?org_id=tmo&amp;pub_id=5965-7984E">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/">NTP: 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.txt"
charset="macintosh">A
Few Facts Concerning GMT, UT, and the RGO</a>
answers questions like "What is the difference between GMT and UTC?"</li>
<li><a
href="http://www.gb.nrao.edu/~rfisher/Ephemerides/times.html">Astronomical
Times</a> explains more abstruse astronomical time scales like TT, TCG,
and TDB.</li>
<li>The <a href="http://www.iau.org/">IAU</a>'s <a
href="http://www.iau-sofa.rl.ac.uk/">Standards Of Fundamental
Astronomy</a> (SOFA) initiative publishes Fortran code for converting
among time scales like TAI, TDB, TT and UTC.</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 (MTC) and the diverse local time
scales used by each landed mission on Mars.</li>
<li><a
href="http://hpiers.obspm.fr/eop-pc/products/bulletins/bulletins.html">Bulletins
maintained by the IERS EOP (PC)</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> covers McCarthy and Klepczynski's proposal
to discontinue leap seconds, published in <a
href="http://www.gpsworld.com/">GPS 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/metrologia.html">Metrologia</a>
<strong>38</strong> (2001), 509&ndash;529.
<a href="http://www.ucolick.org/~sla/leapsecs/onlinebib.html">The
Future of Leap Seconds</a> catalogs information about 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 ISO
8601:1988 - Data elements and interchange formats - Information interchange
- Representation of dates and times (which has been superseded by
<a href="http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=26780">ISO 8601:2000</a>).</li>
<li>
Section 3.3 of <a
href="ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt">Internet RFC 2822</a>
specifies the time notation used in email and <a
href="ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt">HTTP</a> headers.</li>
<li>
<a href="ftp://ftp.rfc-editor.org/in-notes/rfc3339.txt">Internet RFC
3339</a> specifies an ISO 8601 profile for use in new Internet
protocols.</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>
Alphabetic time zone abbreviations should not be used as unique
identifiers for UTC offsets as they are ambiguous in practice. For
example, "EST" denotes 5 hours behind UTC in English-speaking North
America, but it denotes 10 or 11 hours ahead of UTC in Australia;
and French-speaking North Americans prefer "HNE" to "EST". For
compatibility with <a href="http://www.pasc.org/#POSIX">POSIX</a> 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>
</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! Science &gt; Measurements and Units &gt; Time</a></li>
</ul>
</body>
</html>

View file

@ -10,7 +10,7 @@ zdump \- time zone dumper
.B \-v
] [
.B \-c
cutoffyear ] [ zonename ... ]
[loyear,]hiyear ] [ zonename ... ]
.SH DESCRIPTION
.I Zdump
prints the current time in each
@ -38,8 +38,20 @@ if the given time is Daylight Saving Time or
.B isdst=0
otherwise.
.TP
.BI "\-c " cutoffyear
Cut off the verbose output near the start of the given year.
.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.4
.\" @(#)zdump.8 8.1

View file

@ -1,4 +1,4 @@
static char elsieid[] = "@(#)zdump.c 7.31";
static char elsieid[] = "@(#)zdump.c 8.8";
/*
** This code has been made independent of the rest of the time
@ -11,6 +11,19 @@ static char elsieid[] = "@(#)zdump.c 7.31";
#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
@ -61,19 +74,32 @@ static char elsieid[] = "@(#)zdump.c 7.31";
#endif /* !defined DAYSPERNYEAR */
#ifndef isleap
#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
#endif /* !defined isleap */
#if HAVE_GETTEXT - 0
#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)
#ifndef HAVE_GETTEXT
#define HAVE_GETTEXT 0
#endif
#if HAVE_GETTEXT
#include "locale.h" /* for setlocale */
#include "libintl.h"
#endif /* HAVE_GETTEXT - 0 */
#endif /* HAVE_GETTEXT */
#ifndef GNUC_or_lint
#ifdef lint
#define GNUC_or_lint
#endif /* defined lint */
#ifndef lint
#else /* !defined lint */
#ifdef __GNUC__
#define GNUC_or_lint
#endif /* defined __GNUC__ */
@ -83,8 +109,7 @@ static char elsieid[] = "@(#)zdump.c 7.31";
#ifndef INITIALIZE
#ifdef GNUC_or_lint
#define INITIALIZE(x) ((x) = 0)
#endif /* defined GNUC_or_lint */
#ifndef GNUC_or_lint
#else /* !defined GNUC_or_lint */
#define INITIALIZE(x)
#endif /* !defined GNUC_or_lint */
#endif /* !defined INITIALIZE */
@ -96,39 +121,125 @@ static char elsieid[] = "@(#)zdump.c 7.31";
*/
#ifndef _
#if HAVE_GETTEXT - 0
#if HAVE_GETTEXT
#define _(msgid) gettext(msgid)
#else /* !(HAVE_GETTEXT - 0) */
#else /* !HAVE_GETTEXT */
#define _(msgid) msgid
#endif /* !(HAVE_GETTEXT - 0) */
#endif /* !HAVE_GETTEXT */
#endif /* !defined _ */
#ifndef TZ_DOMAIN
#define TZ_DOMAIN "tz"
#endif /* !defined TZ_DOMAIN */
#ifndef P
#ifdef __STDC__
#define P(x) x
#endif /* defined __STDC__ */
#ifndef __STDC__
#define P(x) ()
#endif /* !defined __STDC__ */
#endif /* !defined P */
extern char ** environ;
extern int getopt P((int argc, char * const argv[],
const char * options));
extern int getopt(int argc, char * const argv[],
const char * options);
extern char * optarg;
extern int optind;
extern char * tzname[2];
static char * abbr P((struct tm * tmp));
static long delta P((struct tm * newp, struct tm * oldp));
static time_t hunt P((char * name, time_t lot, time_t hit));
static time_t absolute_min_time;
static time_t absolute_max_time;
static size_t longest;
static char * progname;
static void show P((char * zone, time_t t, int v));
static int warned;
static char * abbr(struct tm * tmp);
static void abbrok(const char * abbrp, const char * zone);
static long delta(struct tm * newp, struct tm * oldp);
static void dumptime(const struct tm * tmp);
static time_t hunt(char * name, time_t lot, time_t hit);
static void setabsolutes(void);
static void show(char * zone, time_t t, int v);
static const char * tformat(void);
static time_t yeartot(long y);
#ifndef TYPECHECK
#define my_localtime localtime
#else /* !defined TYPECHECK */
static struct tm *
my_localtime(tp)
time_t * tp;
{
register struct tm * tmp;
tmp = localtime(tp);
if (tp != NULL && tmp != NULL) {
struct tm tm;
register time_t t;
tm = *tmp;
t = mktime(&tm);
if (t - *tp >= 1 || *tp - t >= 1) {
(void) fflush(stdout);
(void) fprintf(stderr, "\n%s: ", progname);
(void) fprintf(stderr, tformat(), *tp);
(void) fprintf(stderr, " ->");
(void) fprintf(stderr, " year=%d", tmp->tm_year);
(void) fprintf(stderr, " mon=%d", tmp->tm_mon);
(void) fprintf(stderr, " mday=%d", tmp->tm_mday);
(void) fprintf(stderr, " hour=%d", tmp->tm_hour);
(void) fprintf(stderr, " min=%d", tmp->tm_min);
(void) fprintf(stderr, " sec=%d", tmp->tm_sec);
(void) fprintf(stderr, " isdst=%d", tmp->tm_isdst);
(void) fprintf(stderr, " -> ");
(void) fprintf(stderr, tformat(), t);
(void) fprintf(stderr, "\n");
}
}
return tmp;
}
#endif /* !defined TYPECHECK */
static void
abbrok(abbrp, zone)
const char * const abbrp;
const char * const zone;
{
register const char * cp;
register char * wp;
if (warned)
return;
cp = abbrp;
wp = NULL;
while (isascii((unsigned char) *cp) && isalpha((unsigned char) *cp))
++cp;
if (cp - abbrp == 0)
wp = _("lacks alphabetic at start");
else if (cp - abbrp < 3)
wp = _("has fewer than 3 alphabetics");
else if (cp - abbrp > 6)
wp = _("has more than 6 alphabetics");
if (wp == NULL && (*cp == '+' || *cp == '-')) {
++cp;
if (isascii((unsigned char) *cp) &&
isdigit((unsigned char) *cp))
if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
++cp;
if (*cp != '\0')
wp = _("differs from POSIX standard");
}
if (wp == NULL)
return;
(void) fflush(stdout);
(void) fprintf(stderr,
_("%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"),
progname, zone, abbrp, wp);
warned = TRUE;
}
static void
usage(const char *progname, FILE *stream, int status)
{
(void) fprintf(stream,
_("%s: usage is %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n\
\n\
Report bugs to tz@elsie.nci.nih.gov.\n"),
progname, progname);
exit(status);
}
int
main(argc, argv)
@ -138,72 +249,86 @@ char * argv[];
register int i;
register int c;
register int vflag;
register char * cutoff;
register int cutyear;
register long cuttime;
char ** fakeenv;
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;
time_t hibit;
struct tm tm;
struct tm newtm;
register struct tm * tmp;
register struct tm * newtmp;
INITIALIZE(cuttime);
#if HAVE_GETTEXT - 0
(void) setlocale(LC_MESSAGES, "");
INITIALIZE(cutlotime);
INITIALIZE(cuthitime);
#if HAVE_GETTEXT
(void) setlocale(LC_ALL, "");
#ifdef TZ_DOMAINDIR
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined(TEXTDOMAINDIR) */
#endif /* defined TEXTDOMAINDIR */
(void) textdomain(TZ_DOMAIN);
#endif /* HAVE_GETTEXT - 0 */
#endif /* HAVE_GETTEXT */
progname = argv[0];
for (i = 1; i < argc; ++i)
if (strcmp(argv[i], "--version") == 0) {
(void) printf("%s\n", elsieid);
(void) exit(EXIT_SUCCESS);
exit(EXIT_SUCCESS);
} else if (strcmp(argv[i], "--help") == 0) {
usage(progname, stdout, EXIT_SUCCESS);
}
vflag = 0;
cutoff = NULL;
cutarg = NULL;
while ((c = getopt(argc, argv, "c:v")) == 'c' || c == 'v')
if (c == 'v')
vflag = 1;
else cutoff = optarg;
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 cutoff ] zonename ...\n"),
argv[0], argv[0]);
(void) exit(EXIT_FAILURE);
usage(progname, stderr, EXIT_FAILURE);
}
if (cutoff != NULL) {
int y;
if (vflag) {
if (cutarg != NULL) {
long lo;
long hi;
char dummy;
cutyear = atoi(cutoff);
cuttime = 0;
for (y = EPOCH_YEAR; y < cutyear; ++y)
cuttime += DAYSPERNYEAR + isleap(y);
cuttime *= SECSPERHOUR * HOURSPERDAY;
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]);
for (hibit = 1; (hibit << 1) != 0; hibit <<= 1)
continue;
{
register int from;
register int to;
for (i = 0; environ[i] != NULL; ++i)
for (i = 0; environ[i] != NULL; ++i)
continue;
fakeenv = (char **) malloc((size_t) ((i + 2) *
sizeof *fakeenv));
if (fakeenv == NULL ||
(fakeenv[0] = (char *) malloc(longest + 4)) == NULL) {
(void) perror(progname);
(void) exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
}
to = 0;
(void) strcpy(fakeenv[to++], "TZ=");
@ -221,85 +346,171 @@ _("%s: usage is %s [ --version ] [ -v ] [ -c cutoff ] zonename ...\n"),
show(argv[i], now, FALSE);
continue;
}
/*
** Get lowest value of t.
*/
t = hibit;
if (t > 0) /* time_t is unsigned */
t = 0;
warned = FALSE;
t = absolute_min_time;
show(argv[i], t, TRUE);
t += SECSPERHOUR * HOURSPERDAY;
show(argv[i], t, TRUE);
tm = *localtime(&t);
(void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
if (t < cutlotime)
t = cutlotime;
tmp = my_localtime(&t);
if (tmp != NULL) {
tm = *tmp;
(void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
}
for ( ; ; ) {
if (cutoff != NULL && t >= cuttime)
if (t >= cuthitime || t >= cuthitime - SECSPERHOUR * 12)
break;
newt = t + SECSPERHOUR * 12;
if (cutoff != NULL && newt >= cuttime)
break;
if (newt <= t)
break;
newtm = *localtime(&newt);
if (delta(&newtm, &tm) != (newt - t) ||
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) {
strcmp(abbr(&newtm), buf) != 0)) {
newt = hunt(argv[i], t, newt);
newtm = *localtime(&newt);
(void) strncpy(buf, abbr(&newtm),
(sizeof buf) - 1);
newtmp = localtime(&newt);
if (newtmp != NULL) {
newtm = *newtmp;
(void) strncpy(buf,
abbr(&newtm),
(sizeof buf) - 1);
}
}
t = newt;
tm = newtm;
tmp = newtmp;
}
/*
** Get highest value of t.
*/
t = ~((time_t) 0);
if (t < 0) /* time_t is signed */
t &= ~hibit;
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: ", argv[0]);
(void) perror(_("Error writing standard output"));
(void) exit(EXIT_FAILURE);
(void) fprintf(stderr, "%s: ", progname);
(void) perror(_("Error writing to standard output"));
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
/* If exit fails to exit... */
return EXIT_FAILURE;
}
/* gcc -Wall pacifier */
for ( ; ; )
continue;
static void
setabsolutes(void)
{
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
hunt(name, lot, hit)
char * name;
time_t lot;
time_t hit;
yeartot(y)
const long y;
{
time_t t;
struct tm lotm;
struct tm tm;
static char loab[MAX_STRING_LENGTH];
register long myy;
register long seconds;
register time_t t;
lotm = *localtime(&lot);
(void) strncpy(loab, abbr(&lotm), (sizeof loab) - 1);
while ((hit - lot) >= 2) {
t = lot / 2 + hit / 2;
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
hunt(char *name, time_t lot, time_t hit)
{
time_t t;
long diff;
struct tm lotm;
register struct tm * lotmp;
struct tm tm;
register struct tm * tmp;
char loab[MAX_STRING_LENGTH];
lotmp = my_localtime(&lot);
if (lotmp != NULL) {
lotm = *lotmp;
(void) strncpy(loab, abbr(&lotm), (sizeof loab) - 1);
}
for ( ; ; ) {
diff = (long) (hit - lot);
if (diff < 2)
break;
t = lot;
t += diff / 2;
if (t <= lot)
++t;
else if (t >= hit)
--t;
tm = *localtime(&t);
if (delta(&tm, &lotm) == (t - lot) &&
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) {
strcmp(abbr(&tm), loab) == 0)) {
lot = t;
lotm = tm;
lotmp = tmp;
} else hit = t;
}
show(name, lot, TRUE);
@ -308,7 +519,7 @@ time_t hit;
}
/*
** Thanks to Paul Eggert (eggert@twinsun.com) for logic used in delta.
** Thanks to Paul Eggert for logic used in delta.
*/
static long
@ -316,14 +527,14 @@ delta(newp, oldp)
struct tm * newp;
struct tm * oldp;
{
long result;
int tmy;
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(tmy + TM_YEAR_BASE);
result += DAYSPERNYEAR + isleap_sum(tmy, TM_YEAR_BASE);
result += newp->tm_yday - oldp->tm_yday;
result *= HOURSPERDAY;
result += newp->tm_hour - oldp->tm_hour;
@ -335,27 +546,36 @@ struct tm * oldp;
}
static void
show(zone, t, v)
char * zone;
time_t t;
int v;
show(char *zone, time_t t, int v)
{
struct tm * tmp;
register struct tm * tmp;
(void) printf("%-*s ", (int) longest, zone);
if (v)
(void) printf("%.24s UTC = ", asctime(gmtime(&t)));
tmp = localtime(&t);
(void) printf("%.24s", asctime(tmp));
if (*abbr(tmp) != '\0')
(void) printf(" %s", abbr(tmp));
if (v) {
(void) printf(" isdst=%d", tmp->tm_isdst);
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);
(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 *
@ -370,3 +590,84 @@ struct tm * tmp;
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(void)
{
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));
}

View file

@ -269,7 +269,7 @@ A zone line has the form
.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]
Zone NAME GMTOFF RULES/SAVE FORMAT [UNTILYEAR [MONTH [DAY [TIME]]]]
.sp
For example:
.sp
@ -311,15 +311,15 @@ Alternately,
a slash (/)
separates standard and daylight abbreviations.
.TP
.B UNTIL
.B UNTILYEAR [MONTH [DAY [TIME]]]
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.
fields of a rule; trailing fields can be omitted, and default to the
earliest possible value for the missing fields.
.IP
The next line must be a
.q continuation
@ -328,11 +328,11 @@ 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
.q until
information in the previous line in the file used by the previous line.
Continuation lines may contain
.q until
information, just as zone lines do, indicating that the next line is a further
continuation.
.PP
A link line has the form
@ -411,14 +411,83 @@ or
.q Rolling
if the leap second time given by the other fields should be interpreted as
local wall clock time.
.SH NOTE
.SH "EXTENDED EXAMPLE"
Here is an extended example of
.I zic
input, intended to illustrate many of its features.
.br
.ne 22
.nf
.in +2m
.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
Rule Swiss 1940 only - Nov 2 0:00 1:00 S
Rule Swiss 1940 only - Dec 31 0:00 0 -
Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 S
Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0
.sp .5
Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S
Rule EU 1977 only - Sep lastSun 1:00u 0 -
Rule EU 1978 only - Oct 1 1:00u 0 -
Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
Rule EU 1996 max - Oct lastSun 1:00u 0 -
.sp
.ta \w'# Zone\0\0'u +\w'Europe/Zurich\0\0'u +\w'0:34:08\0\0'u +\w'RULES/SAVE\0\0'u +\w'FORMAT\0\0'u
# Zone NAME GMTOFF RULES FORMAT UNTIL
Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12
0:29:44 - BMT 1894 Jun
1:00 Swiss CE%sT 1981
1:00 EU CE%sT
.sp
Link Europe/Zurich Switzerland
.sp
.in
.fi
In this example, the zone is named Europe/Zurich but it has an alias
as Switzerland. Zurich was 34 minutes and 8 seconds west of GMT until
1848-09-12 at 00:00, when the offset changed to 29 minutes and 44
seconds. After 1894-06-01 at 00:00 Swiss daylight saving rules (defined
with lines beginning with "Rule Swiss") apply, and the GMT offset
became one hour. From 1981 to the present, EU daylight saving rules have
applied, and the UTC offset has remained at one hour.
.PP
In 1940, daylight saving time applied from November 2 at 00:00 to
December 31 at 00:00. In 1941 and 1942, daylight saving time applied
from the first Sunday in May at 02:00 to the first Sunday in October
at 00:00.
The pre-1981 EU daylight-saving rules have no effect
here, but are included for completeness. Since 1981, daylight
saving has begun on the last Sunday in March at 01:00 UTC.
Until 1995 it ended the last Sunday in September at 01:00 UTC,
but this changed to the last Sunday in October starting in 1996.
.PP
For purposes of
display, "LMT" and "BMT" were initially used, respectively. Since
Swiss rules and later EU rules were applied, the display name for the
timezone has been CET for standard time and CEST for daylight saving
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.22
.\" @(#)zic.8 8.4

1141
zic/zic.c

File diff suppressed because it is too large Load diff