Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Oleg Alistratov                      2:4648/1.20    05 Jan 2001  04:41:00
 To : M.Babakov@sochi.net.ru
 Subject : Работа с датой и временем...
 -------------------------------------------------------------------------------- 
 
 ъъъ 03 Jan 01 ъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъъ
 єГДъ письмо от *M.Babakov@sochi.net.ru* к *All* ъДД
 
  >> Кто и как работает с датами (сравнить диапазон, прибавить дней -
  >> часов). P.S. DateCalc не предлагать...
 
 ??? причины религиозные? ;-)
 
 Как-то мне пришлось написать свои Days_In_Month и Day_Of_Week, потому что
 хостер ленился прикрутить Date::Calc. Вот, огрызки этого скрипта остались в
 живых, думаю, разберешься.
 
 Все делается через функцию Encode_Date, которая превращает список (год, месяц,
 день) в целое = количество дней с 1.01.0001
 
 Эти числа можешь складывать, вычитать и делить в столбик ;-)
 
 Как написать Decode_Date - сам разберешься, если нет, свистни, вышлю мылом.
 
 Код не очень кузявый, потому что переводил с Си, на котором написал библиотечку
 а-ля TDateTime из Борландовского VCL, а там я во всю использовал указатели.
 
 Могу выслать сишные сорцы, там еще кое-что полезное есть.
 
 ДД _WO_DATE_CALC.PL_ ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 #!/usr/bin/perl -w
 
 # --------------------------------------------------------------------
 
 my @mLeap = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 my @mNoLeap = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 
 # --------------------------------------------------------------------
 sub Encode_Date
 {
     my ($year, $month, $day) = @_;
     my $xdate = 0;
     my $leap = Is_Leap_Year($year);
 
     if (
             ($year >= 1) && ($year <= 9999) &&
             ($month >= 1) && ($month <= 12) &&
             ($day >= 1) &&
             ($day <= ($leap ? $mLeap[$month - 1] : $mNoLeap[$month - 1]))
     )
     {
             my $i;
             for ($i = 0; $i < $month - 1; $i++)
             {
                 $day += ($leap ? $mLeap[$i] : $mNoLeap[$i]);
             }
             $i = $year - 1;
             $xdate = $i * 365 + $i / 4 - $i / 100 + $i / 400 + $day;
     }
     return $xdate;
 }
 # --------------------------------------------------------------------
 sub Is_Leap_Year
 {
     return (($_[0] % 4 == 0) &&
             (($_[0] % 100 != 0) || ($_[0] % 400 == 0))) ?
     1 : 0;
 }
 # --------------------------------------------------------------------
 sub Days_in_Month
 {
     return Is_Leap_Year($_[0]) ? $mLeap[$_[1] - 1] : $mNoLeap[$_[1] - 1];
 }
 # --------------------------------------------------------------------
 sub Day_of_Week
 {
     my $d = Encode_Date(@_) % 7;
     $d = 7 if (!$d);
     return $d;
 }
 # --------------------------------------------------------------------
 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 Олег Алистратов AKA Али <oali@mail.ru>                   [Team Выспаться]
 
 --- С моих слов записано верно.
  * Origin: Ходют тут всякие, а потом плавки пропадают... (2:4648/1.20)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Работа с датой и временем...   Nickolay Romanov   03 Jan 2001 15:39:15 
 Работа с датой и временем...   Ivan Frolcov   03 Jan 2001 16:08:26 
 Re: Работа с датой и временем...   Vladimir Podgorny   03 Jan 2001 15:59:30 
 Re: Работа с датой и временем...   Michael B. Babakov   03 Jan 2001 15:59:31 
 Работа с датой и временем...   Oleg Alistratov   05 Jan 2001 04:41:00 
 Re: Работа с датой и временем...   Nickolay Romanov   05 Jan 2001 15:10:14 
Архивное /ru.perl/27353a5544f3.html, оценка 3 из 5, голосов 22
Яндекс.Метрика
Valid HTML 4.01 Transitional