mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 04:43:53 +00:00
Vendor import of tzcode2009e.
Obtained from: ftp://elsie.nci.nih.gov/pub/
This commit is contained in:
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
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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
121
libc/stdtime/time2posix.3
Normal 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
152
libc/stdtime/tzfile.5
Normal 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.
|
|
@ -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
418
unused/Makefile
Normal 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
159
unused/checktab.awk
Normal 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
175
unused/date.1
Normal 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
127
unused/date.1.txt
Normal 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
945
unused/date.c
Normal 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
BIN
unused/itca.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 55 KiB |
239
unused/newctime.3
Normal file
239
unused/newctime.3
Normal 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
149
unused/newctime.3.txt
Normal 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
230
unused/newstrftime.3
Normal 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
149
unused/newstrftime.3.txt
Normal 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
237
unused/newtzset.3
Normal 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
153
unused/newtzset.3.txt
Normal 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
83
unused/time2posix.3.txt
Normal 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)
|
|
@ -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&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&sql=A5bkvu3xjan1k">AMG Rating</a></td><td>unrated</td></tr>
|
||||
<tr><td> </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&sql=10:13rc28vw054a">AMG Rating</a></td><td>4.5 stars</td></tr>
|
||||
<tr><td> </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&sql=10:7ddovwvla9xk">AMG Rating</a></td><td>2.5 stars</td></tr>
|
||||
<tr><td> </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> </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> </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> </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> </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> </td></tr>
|
||||
|
||||
<tr><td>TV episode title</td><td>Time Tunnel</td>
|
||||
<tr><td>TV series</td><td><em>The Adventures of Pete & 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> </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> </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> </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> </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> </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&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> </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
648
unused/tz-link.htm
Normal 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
|
||||
→ 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ñ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° apart, except that
|
||||
UTC−12 and UTC+12 are each 7.5° wide and are separated by
|
||||
the 180° 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 & 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 & 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) §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 & 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 > Time</a></li>
|
||||
<li><a href="http://dir.yahoo.com/Science/Measurements_and_Units/Time">Yahoo!
|
||||
Directory > Science > Measurements and Units > Time</a></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
106
unused/tzfile.5.txt
Normal file
106
unused/tzfile.5.txt
Normal 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
41
unused/tzselect.8
Normal 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
41
unused/tzselect.8.txt
Normal 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
323
unused/tzselect.ksh
Normal 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
111
unused/usno1988
Normal 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
452
unused/usno1989
Normal 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
452
unused/usno1989a
Normal 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
326
unused/usno1995
Normal 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
327
unused/usno1997
Normal 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
327
unused/usno1998
Normal 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
29
unused/workman.sh
Normal 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
43
unused/zdump.8.txt
Normal 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
308
unused/zic.8.txt
Normal 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
54
unused/zoneinfo2tdf.pl
Executable 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";
|
||||
}
|
81
zic/Music
81
zic/Music
|
@ -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
|
12
zic/README
12
zic/README
|
@ -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!
|
||||
|
||||
|
|
109
zic/Theory
109
zic/Theory
|
@ -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.
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
194
zic/private.h
194
zic/private.h
|
@ -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.
|
||||
*/
|
||||
|
|
14
zic/scheck.c
14
zic/scheck.c
|
@ -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));
|
||||
|
|
443
zic/tz-link.htm
443
zic/tz-link.htm
|
@ -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
|
||||
& 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ñ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&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–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–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 > Time</a></li>
|
||||
<li><a href="http://dir.yahoo.com/Science/Measurements_and_Units/Time/">Yahoo! Science > Measurements and Units > Time</a></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
20
zic/zdump.8
20
zic/zdump.8
|
@ -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
|
||||
|
|
535
zic/zdump.c
535
zic/zdump.c
|
@ -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));
|
||||
}
|
||||
|
|
91
zic/zic.8
91
zic/zic.8
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue