URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 3376
[ Назад ]

Исходное сообщение
"time в perl"

Отправлено pheonix , 08-Июн-05 08:34 
с утром добрым

кто мне может сказать из чего строиться переменная time в перле если её вывести то получаеться что-то вроде такого 1118204400, это я так понимаю число секунд, но от какого момента времяни, кто знает?


Содержание

Сообщения в этом обсуждении
"time в perl"
Отправлено pheonix , 08-Июн-05 08:44 
>с утром добрым
>
>кто мне может сказать из чего строиться переменная time в перле если
>её вывести то получаеться что-то вроде такого 1118204400, это я так
>понимаю число секунд, но от какого момента времяни, кто знает?


аха так посчитал примерно от 2005 года, но проблема не в этом скажите мне плиз как мне определить по заданной дате день недели формат даты вот такой или без разницы какой главное чтобы задавался год, месяц и число, а в ответ мне выдавался день недели, накопал в инете какую-то то формулу составил процедуру, но она не всегда корректно работает какие то месяца сбиваються на один день и хз мочему так, причём некторые месяца всё ок работают, а некоторые в этом же году работают, короче не правильно работают

sub cal_week($;$;$)
{
    my $day=shift;
    my $mon=shift;
    my $yea=shift;
    
    if($mon <3 )
    {
    $mon+=12;
    $yea-=1;
    }
    $n1=(26 *($mon +1))/10;
    $n2=int((125 * $yea)/100);
    $day=($day + $n1 + $n2-($yea/100) + ($yea /400) -1) % 7;
    if($day == 0 ){$day=7;}
    $day-=1;
    return $day;
}

кто знает как решить проблему?


"time в perl"
Отправлено allez , 08-Июн-05 09:59 
Попробуйте использовать модуль Time::localtime.

use Time::localtime;

sub printtime {
    my $now=ctime();
    $now=~s/  / /;
    my @d=split(/ /,$now);
    return join(' ',$d[1],$d[2],$d[3]," ");
}

В итоге функция printtime() выдает строку вида "Jun  8 13:55:42".
Полный вывод функции ctime() таков: "Wed Jun  8 13:55:42 2005".
Ответы на многие вопросы вам даст "perldoc Time::localtime".


"time в perl"
Отправлено pheonix , 08-Июн-05 10:49 
дак зачем стока когда можно вот так
$time=localtime(time);
print$time;

но мне то надо по заданной дате узнать день недели, я так и не увидел в вашем ответе, решение на мою проблему


"time в perl"
Отправлено madskull , 08-Июн-05 11:24 
>дак зачем стока когда можно вот так
>$time=localtime(time);
>print$time;
>
>но мне то надо по заданной дате узнать день недели, я так
>и не увидел в вашем ответе, решение на мою проблему

видимо, от man perlfunc не отвертеться


"time в perl"
Отправлено allez , 08-Июн-05 13:22 
>но мне то надо по заданной дате узнать день недели, я так
>и не увидел в вашем ответе, решение на мою проблему

Вам ответил как я:
>Ответы на многие вопросы вам даст "perldoc Time::localtime"
так и madskull, читайте "perldoc perlfunc" и "perldoc Time::localtime",
это поможет вам справиться со стоящей перед вами задачей. А решать ее
за вас никто не будет, ибо не обязан.


"time в perl"
Отправлено Асен Тотин , 11-Июн-05 01:11 
Привет,

Почитайте man perlfunc на тему time() и localtime() - в контексте строковой переменной и массива. Рассмотрите что выдает
$var = localtime();
и
@var = localtime();
А вообще-то time() - то же, что и в C, т.е. UNIX timestamp (кол-во секунд с 00:00:00 1-го января 1970-о года по GMT). Кстати, localtime - не что иное, как struct tm в том же С...

WWell,


"time в perl"
Отправлено фтвкун , 11-Дек-09 12:51 
>[оверквотинг удален]
>переменной и массива. Рассмотрите что выдает
>$var = localtime();

>@var = localtime();
>А вообще-то time() - то же, что и в C, т.е. UNIX
>timestamp (кол-во секунд с 00:00:00 1-го января 1970-о года по GMT).
>Кстати, localtime - не что иное, как struct tm в том
>же С...
>
>WWell,

($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
$year += 1900;
$mon += 1;
if ( $mon < 10 ) { $mon = '0'.$mon };
if ( $mday < 10 ) { $mday = '0'.$mday };
$date = $mday.'.'.$mon.'.'.$year;


"time в perl"
Отправлено Саня , 21-Фев-10 20:44 
$day=&getDayBySec(<секунды>); # секунды от 1 января 1970 года

sub getDayBySec
{
  my @list_day=("четверг","пятница","суббота","воскресенье","понедельник","вторник","среда");
  my $realDay="";
  my @text=Sec_to_Date($_[0]);
  my $cur_sec=$_[0];
  my $all_days=int($cur_sec/86400); if ($cur_sec├400) { $all_days++ }
  if ($all_days%7)
    {          
      $realDay=$list_day[($all_days-((int($all_days/7))*7))-1];
    } else { $realDay=$list_day[-1] }
  return $realDay;
}

Если захочешь, то поймешь что к чему. В секунды преобразовать тоже просто:

sub Date_to_Sec # $resultSec=&Date_to_Sec(ДД, ММ, ГГГГ, ЧЧ, ММ, СС);  $resultSec=&Date_to_Sec(25,11,2008,1,47,58);
{
  my $startDateDay   = 1;
  my $startDateMonth = 1;
  my $startDateYear  = 1970;
  my @daysAtMonth=(31,28,31,30,31,30,31,31,30,31,30,31);
  my ($rD, $rM, $rY, $vY, $fY, $secD, $secM, $secY, $secH, $secM, $secS, $iM, $all_time_sec, $tmpDays, $all_date_sec) = 0;
  my ($isLeap) = false;
  if ($_[0] eq "" || $_[0]!~/\d/) { return }
  if ($_[1] eq "" || $_[1]!~/\d/) { return }
  if ($_[2] eq "" || $_[2]!~/\d/ || length($_[2])!=4) { return }
  if ($_[3] ne "" && $_[3]!~/\d/) { return }
  if ($_[4] ne "" && $_[4]!~/\d/) { return }
  if ($_[5] ne "" && $_[5]!~/\d/) { return }
  $rD = $_[0] - $startDateDay; $rM = $_[1] - $startDateMonth; $rY = $_[2] - $startDateYear;
  $vY = int ($rY / 4);
  if (($_[2] % 4) > 0) { $isLeap = false } else { $isLeap = true; $daysAtMonth[1]=29 }
  $fY = $rY - $vY; $secY = (($vY*366) + ($fY*365)) * 86400;
  $secD = $rD * 86400; for ($iM=0;$iM<$rM;$iM++) { $tmpDays+=$daysAtMonth[$iM] }
  $secM = $tmpDays* 86400; $all_date_sec = $secD + $secM + $secY; $secH = $_[3] * 3600;
  $secM = $_[4] * 60; $secS = $_[5]; $all_time_sec = $secH + $secM + $secS;
  return $all_time_sec + $all_date_sec;
}


"time в perl"
Отправлено gawriil , 27-Апр-10 13:19 
>[оверквотинг удален]
>  $fY = $rY - $vY; $secY = (($vY*366) + ($fY*365))
>* 86400;
>  $secD = $rD * 86400; for ($iM=0;$iM<$rM;$iM++) { $tmpDays+=$daysAtMonth[$iM] }
>
>  $secM = $tmpDays* 86400; $all_date_sec = $secD + $secM +
>$secY; $secH = $_[3] * 3600;
>  $secM = $_[4] * 60; $secS = $_[5]; $all_time_sec =
>$secH + $secM + $secS;
>  return $all_time_sec + $all_date_sec;
>}

Ну вот зачем все это городить? есть отличный модуль Date::Calc на спане