>>>>> "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