Это - достаточно беспорядочный архив сообщений конференций сети fidonet, которые на момент их прочтения мной
показались полезными или интересными. Многие устарели, многие узкоспецифичны и малоинтересны, но может оказаться и что-то новое...
- __techs (2:5015/42) ----------------------------------------------- __techs - Msg : 38 of 1000 Scn From : Mike Karelin 2:5030/506.3 19 Jun 96 12:48:34 To : Viktor Ostashev 22 Jun 96 09:39:38 Subj : UNIXdate - а теперь наоборот ------------------------------------------------------------------------------- @AREA:NICE.SOURCES Hello Viktor. Replying to a msg dated 15 Jun 96 22:27, from Viktor Ostashev to Mike Karelin. Тысяча извинений! В моем предыдущем письме от 13.06.96 приведен не весь исходник для работы с датами. Самого интересного там нет :-( Исправляюсь... === Cut === /* ** scalar date routines -- public domain by Ray Gardner ** These will work over the range 1/01/01 thru 14699/12/31 */ int isleap (unsigned yr) { return yr % 400 == 0 || (yr % 4 == 0 && yr % 100 != 0); } static unsigned months_to_days (unsigned month) { return (month * 3057 - 3007) / 100; } static long years_to_days (unsigned yr) { return yr * 365L + yr / 4 - yr / 100 + yr / 400; } long ymd_to_scalar (unsigned yr, unsigned mo, unsigned day) { long scalar; scalar = day + months_to_days(mo); if ( mo > 2 ) /* adjust if past February */ scalar -= isleap(yr) ? 1 : 2; yr--; scalar += years_to_days(yr); return scalar; } void scalar_to_ymd (long scalar, unsigned *pyr, unsigned *pmo, unsigned *pday) { unsigned n; /* compute inverse of years_to_days() */ for ( n = (unsigned)((scalar * 400L) / 146097); years_to_days(n) < scalar;) n++; /* 146097 == years_to_days(400) */ *pyr = n; n = (unsigned)(scalar - years_to_days(n-1)); if ( n > 59 ) { /* adjust if past February */ n += 2; if ( isleap(*pyr) ) n -= n > 62 ? 1 : 2; } *pmo = (n * 100 + 3007) / 3057; /* inverse of months_to_days() */ *pday = n - months_to_days(*pmo); } === Cut === С уважением, Mike --- GoldED/386 2.50+ * Origin: ... (2:5030/506.3)