Kwajalein's missing day uncovered a bug in zdump.c, which missed the 24-hour jump ahead because the jump was masked by the HOURSPERDAY hack in the `delta' function. Here's a patch, plus a proposed new `pacific' file for islands in the Pacific. I've made up the abbreviation `KST'; I don't know what abbreviation Kwajaleinians really use. I don't know when Kwajalein originally started using -12:00 -- it must have been soon after WW II. *** /dev/null Fri Aug 27 07:48:01 1993 --- pacific Fri Aug 27 07:38:41 1993 *************** *** 0 **** --- 1,14 ---- + # @(#)pacific + + + # 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. + + # Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] + Zone Kwajalein -12:00 - KST 1993 Aug 20 + 12:00 - KST =================================================================== RCS file: zdump.c,v retrieving revision 7.3 retrieving revision 7.3.1.1 diff -c -r7.3 -r7.3.1.1 *** zdump.c 1993/01/08 12:00:38 7.3 --- zdump.c 1993/08/26 21:08:10 7.3.1.1 *************** *** 55,60 **** --- 55,64 ---- #define DAYSPERNYEAR 365 #endif /* !defined DAYSPERNYEAR */ + #ifndef TM_YEAR_BASE + #define TM_YEAR_BASE 1900 + #endif + extern char ** environ; extern int getopt(); extern char * optarg; *************** *** 230,243 **** struct tm * newp; 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 --- 234,256 ---- struct tm * newp; struct tm * oldp; { ! int newy = newp->tm_year + (TM_YEAR_BASE - 1); ! int oldy = oldp->tm_year + (TM_YEAR_BASE - 1); ! return ! ( ! ( ! ( ! /* difference in day of year */ ! newp->tm_yday - oldp->tm_yday ! /* + intervening leap days */ ! + (newy/4 - oldy/4) ! - (newy/100 - oldy/100) ! + (newy/400 - oldy/400) ! /* + difference in years * 365 */ ! + (long)(newy-oldy) * 365 ! )*24 + (newp->tm_hour - oldp->tm_hour) ! )*60 + (newp->tm_min - oldp->tm_min) ! )*60 + (newp->tm_sec - oldp->tm_sec); } static void
participants (1)
-
eggert@stet.twinsun.com