>>>>> "C" == Conrad Schneiker/Austin/Contr/IBM <schneik / us.ibm.com> writes:

C> ... To follow up on related notes, it seems like no separate check is made 
C> to distinguish when leap seconds are specified in error versus when they 
C> are legitimate.

 Except that ruby don't work with leap seconds.

 The difference between Solaris and Linux is here (in time.c)

327     #if defined(HAVE_TM_ZONE)
328             tm = localtime(&guess);
329             if (!tm) goto error;
330             guess -= tm->tm_gmtoff;
331             tm = localtime(&guess);
332             if (!tm) goto error;
333             if (tm->tm_hour != tptr->tm_hour) {
334                 guess += (tptr->tm_hour - tm->tm_hour)*3600;
335             }
336     #else
337             struct tm gt, lt;
338             long tzsec;
339
340             t = 0;
341             tm = gmtime(&guess);

 with Linux HAVE_TM_ZONE is defined (undef for Solaris) and with leap
 seconds it is in the case where (tm->tm_hour != tptr->tm_hour), this is
 why it give this strange result (tptr->tm_hour == 23 and tm->tm_hour == 0)

pigeon% ruby -ve 'p Time.local(1997,12,31,23,59,60)'
ruby 1.6.1 (2000-09-27) [i686-linux]
Thu Jan 01 23:00:00 CET 1998
pigeon% 



Guy Decoux