с утром добрымкто мне может сказать из чего строиться переменная time в перле если её вывести то получаеться что-то вроде такого 1118204400, это я так понимаю число секунд, но от какого момента времяни, кто знает?
>с утром добрым
>
>кто мне может сказать из чего строиться переменная 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::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=localtime(time);
print$time;но мне то надо по заданной дате узнать день недели, я так и не увидел в вашем ответе, решение на мою проблему
>дак зачем стока когда можно вот так
>$time=localtime(time);
>print$time;
>
>но мне то надо по заданной дате узнать день недели, я так
>и не увидел в вашем ответе, решение на мою проблемувидимо, от man perlfunc не отвертеться
>но мне то надо по заданной дате узнать день недели, я так
>и не увидел в вашем ответе, решение на мою проблемуВам ответил как я:
>Ответы на многие вопросы вам даст "perldoc Time::localtime"
так и madskull, читайте "perldoc perlfunc" и "perldoc Time::localtime",
это поможет вам справиться со стоящей перед вами задачей. А решать ее
за вас никто не будет, ибо не обязан.
Привет,Почитайте man perlfunc на тему time() и localtime() - в контексте строковой переменной и массива. Рассмотрите что выдает
$var = localtime();
и
@var = localtime();
А вообще-то time() - то же, что и в C, т.е. UNIX timestamp (кол-во секунд с 00:00:00 1-го января 1970-о года по GMT). Кстати, localtime - не что иное, как struct tm в том же С...WWell,
>[оверквотинг удален]
>переменной и массива. Рассмотрите что выдает
>$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;
$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;
}
>[оверквотинг удален]
> $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 на спане