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






<<<

архив dibr

>>>'