Thanks to Paul Eggert for the Kwajalein changes. My notions on how to do it are attached. It might be better to toss Kwajalein into australasia than to create a new file; as I recall, some vendors might be using a "patch" scheme that's better at handling changes than handling additions. I also took the opportunity while visiting zdump to eliminate the "VERY approximate" kludge in handling zdump's "-c" option. (Given the relentless increase in processor power, maybe the better thing to do is eliminate the "-c" option.) I'll wait a bit for feedback from this list; eventually folks should expect to see tzcode93e.tar.Z and tzdata93e.tar.Z on elsie.nci.nih.gov. --ado SCCS/s.australasia: 7.13 vs. 7.14 *** 7.13/australasia Sat Aug 28 12:29:52 1993 --- 7.14/australasia Sat Aug 28 12:29:52 1993 *************** *** 1,4 **** ! # @(#)australasia 7.13 # Notes are at the end of this file --- 1,4 ---- ! # @(#)australasia 7.14 # Notes are at the end of this file *************** *** 105,110 **** --- 105,118 ---- ############################################################################### + # Kwajalein + + # Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] + Zone Kwajalein -12:00 - KST 1993 Aug 20 + 12:00 - KST + + ############################################################################### + # NOTES ############################################################################### *************** *** 431,433 **** --- 439,451 ---- # From Arthur David Olson (March 8, 1992): # The chosen rules use the Davies October 8 values for the start of DST in 1989 # rather than the October 1 value. + + ############################################################################### + + # Kwajalein + + # In comp.risks 14.87 (26 August 1993), Peter Neumann writes: + # I wonder what happened in Kwajalein, where there was NO Friday, + # August 20, 1993. Thursday night at midnight Kwajalein switched sides with + # respect to the International Date Line, to rejoin its fellow islands, + # going from 11:59 p.m. Thursday to 12:00 m. Saturday in a blink. SCCS/s.zdump.c: 7.3 vs. 7.5 *** 7.3/zdump.c Sat Aug 28 12:30:03 1993 --- 7.5/zdump.c Sat Aug 28 12:30:03 1993 *************** *** 1,6 **** #ifndef lint #ifndef NOID ! static char elsieid[] = "@(#)zdump.c 7.3"; #endif /* !defined NOID */ #endif /* !defined lint */ --- 1,6 ---- #ifndef lint #ifndef NOID ! static char elsieid[] = "@(#)zdump.c 7.5"; #endif /* !defined NOID */ #endif /* !defined lint */ *************** *** 39,46 **** #define SECSPERMIN 60 #endif /* !defined SECSPERMIN */ #ifndef SECSPERHOUR ! #define SECSPERHOUR 3600 #endif /* !defined SECSPERHOUR */ #ifndef HOURSPERDAY --- 39,50 ---- #define SECSPERMIN 60 #endif /* !defined SECSPERMIN */ + #ifndef MINSPERHOUR + #define MINSPERHOUR 60 + #endif /* !defined MINSPERHOUR */ + #ifndef SECSPERHOUR ! #define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) #endif /* !defined SECSPERHOUR */ #ifndef HOURSPERDAY *************** *** 51,60 **** --- 55,72 ---- #define EPOCH_YEAR 1970 #endif /* !defined EPOCH_YEAR */ + #ifndef TM_YEAR_BASE + #define TM_YEAR_BASE 1900 + #endif /* !defined TM_YEAR_BASE */ + #ifndef DAYSPERNYEAR #define DAYSPERNYEAR 365 #endif /* !defined DAYSPERNYEAR */ + #ifndef isleap + #define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0) + #endif /* !defined isleap */ + extern char ** environ; extern int getopt(); extern char * optarg; *************** *** 104,116 **** argv[0], argv[0]); (void) exit(EXIT_FAILURE); } ! if (cutoff != NULL) cutyear = atoi(cutoff); ! /* ! ** VERY approximate. ! */ ! cuttime = (long) (cutyear - EPOCH_YEAR) * ! SECSPERHOUR * HOURSPERDAY * DAYSPERNYEAR; (void) time(&now); longest = 0; for (i = optind; i < argc; ++i) --- 116,130 ---- argv[0], argv[0]); (void) exit(EXIT_FAILURE); } ! if (cutoff != NULL) { ! int y; ! cutyear = atoi(cutoff); ! cuttime = 0; ! for (y = EPOCH_YEAR; y < cutyear; ++y) ! cuttime += DAYSPERNYEAR + isleap(y); ! cuttime *= SECSPERHOUR * HOURSPERDAY; ! } (void) time(&now); longest = 0; for (i = optind; i < argc; ++i) *************** *** 231,243 **** struct tm * oldp; { long result; ! result = newp->tm_hour - oldp->tm_hour; ! if (result < 0) ! result += HOURSPERDAY; ! result *= SECSPERHOUR; ! result += (newp->tm_min - oldp->tm_min) * SECSPERMIN; ! return result + newp->tm_sec - oldp->tm_sec; } static void --- 245,265 ---- struct tm * oldp; { long result; + int tmy; ! if (newp->tm_year < oldp->tm_year) ! return -delta(oldp, newp); ! result = 0; ! for (tmy = oldp->tm_year; tmy < newp->tm_year; ++tmy) ! result += DAYSPERNYEAR + isleap(tmy + TM_YEAR_BASE); ! result += newp->tm_yday - oldp->tm_yday; ! result *= HOURSPERDAY; ! result += newp->tm_hour - oldp->tm_hour; ! result *= MINSPERHOUR; ! result += newp->tm_min - oldp->tm_min; ! result *= SECSPERMIN; ! result += newp->tm_sec - oldp->tm_sec; ! return result; } static void
participants (1)
-
ado