Это - достаточно беспорядочный архив сообщений конференций сети fidonet, которые на момент их прочтения мной
показались полезными или интересными. Многие устарели, многие узкоспецифичны и малоинтересны, но может оказаться и что-то новое...
- __techs (2:5015/42) ----------------------------------------------- __techs - Msg : 19 of 1000 Scn From : Vadim Petrjaev 2:5020/158 22 May 96 11:50:02 To : Askar Rahimberdiev 23 May 96 04:32:46 Subj : У кого сохранилось? Расстояние междy двyмя датами. ------------------------------------------------------------------------------- @AREA:NICE.SOURCES Hello, Askar! 22 May 96 00:00, Askar Rahimberdiev wrote to All: DR>> Пролетала тyт не так давно программа для определения расстояния (в DR>> днях) междy двyмя датами (или количество от рождества Христова - Есть, но в промежутке 1980-2080гг (по двум последним цифрам года). Если есть желание можно расширить. Тогда вместо unsigned использовать надо long и учесть, что годы кратные 100 и не кратные 1000 не високосные. Hормировать тогда не надо. Просто у меня в базе данных на год исторически два символа. static unsigned int rebuild_date(char *date /*, int type */ ) { char tmp[12]; unsigned d, m, y, adj; // Plt_DateC2S(type,date,tmp); это преобразовывало дату в формат mmddyy // после выкидывания дату нужно подсовывать сразу в таком формате // параметр type, естественно, не нужен tmp[6]=0; y=atoi(tmp+4); if ( y<80 ) // нормируем на 1980 { y+=20; } else { y-=80; } tmp[4]=0; d=atoi(tmp+2); tmp[2]=0; m=atoi(tmp); adj=y/4; if ( m>2 ) { adj++; // учитываем 1980-й } switch ( m ) { case 12: adj+=30; case 11: adj+=31; case 10: adj+=30; case 9: adj+=31; case 8: adj+=31; case 7: adj+=30; case 6: adj+=31; case 5: adj+=30; case 4: adj+=31; case 3: adj+=28; case 2: adj+=31; default: break; } return(d+adj+y*365); } int comp_date(char *d1, char *d2 /* , int type */) { unsigned int r1, r2; r1=rebuild_date(d1 /* ,type */ ); r2=rebuild_date(d2 /* ,type */ ); return(r1-r2); } Желаю удачи, Вадим. --- GoldED/2 2.50+ * Origin: *** Fire Horse *** MO,XA,V34,H16 *** 0:00-8:00 *** (2:5020/158)