DiBR
обычная кошмарная
домашняя страничка
Ежекакполучится околокомпьютерное обозрение
 
  <<<  предыдущий Tech! archive #19 следующий  >>>  
   Последний выпуск       Архив       Ссылки       Полезности       humor.filtered       Фотки       О сайте   
          Это - достаточно беспорядочный архив сообщений конференций сети 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)






<<<

архив dibr

>>>'