DiBR
обычная кошмарная
домашняя страничка
Ежекакполучится околокомпьютерное обозрение
 
  <<<  предыдущий Tech! archive #39 следующий  >>>  
   Последний выпуск       Архив       Ссылки       Полезности       humor.filtered       Фотки       О сайте   
          Это - достаточно беспорядочный архив сообщений конференций сети fidonet, которые на момент их прочтения мной показались полезными или интересными. Многие устарели, многие узкоспецифичны и малоинтересны, но может оказаться и что-то новое...
         
- __techs (2:5015/42) ----------------------------------------------- __techs -
Msg  : 39 of 1000                          Scn
From : Boris Usievich                      2:5020/47.4     22 Jun 96  14:35:58
To   : Viktor Ostashev                                     22 Jun 96  23:36:58
Subj : UNIXdate - а теперь наоборот
-------------------------------------------------------------------------------
@AREA:NICE.SOURCES
Hello Viktor!

15 Jun 96 22:27, Viktor Ostashev wrote to Mike Karelin:

VO>      Так с этим пpоблем нет. Пpоблема в пpотивоположной задаче -
VO> pаскpyтить yсловный ("абсолютный") номеp дня обpатно в датy, пpичем хотя
VO> бы для любого дня нашей эpы (до нашей эpы не беpем). Очевидно, что задача
VO> имеет единственное pешение. Hо похоже, что только пеpебоpом :((((((.

-- Cut Here --------8<-------------------8<---------------
//
// Convert a Julian day number to its corresponding Gregorian calendar
// date.  Algorithm 199 from Communications of the ACM, Volume 6, No. 8,
// (Aug. 1963), p. 444.  Gregorian calendar started on Sep. 14, 1752.
// This function not valid before that.
//
void _BIDSNEARFUNC TDate::Mdy( MonthTy _BIDSFAR & m, DayTy _BIDSFAR & D, YearTy
_BIDSFAR & y ) const
{
   unsigned long d;
   JulTy j = Julnum - 1721119L;
   y = (YearTy) (((j<<2) - 1) / 146097L);
   j = (j<<2) - 1 - 146097L*y;
   d = (j>>2);
   j = ((d<<2) + 3) / 1461;
   d = (d<<2) + 3 - 1461*j;
   d = (d + 4)>>2;
   m = (MonthTy)(5*d - 3)/153;
   d = 5*d - 3 - 153*m;
   D = (DayTy)((d + 5)/5);
   y = (YearTy)(100*y + j);

   if( m < 10 )
       m += 3;
   else
       {
       m -= 9;
       y++;
       }
}
-- Cut Here --------8<-------------------8<---------------

кусок выдран из Борландовского classlib'а. Желающие получать даты начиная с
начала нашей эры могут попытаться понять, как это работает и модифицировать ;)

Sincerely yours,
Boris Usievich


--- GoldED/386 2.50+
* Origin: borisu@kapella.gpi.ru (2:5020/47.4)






<<<

архив dibr

>>>'