Есть ли какой-нибудь модуль, который переводит количество секунд в формат "месяцы/недели/часы/минуты/секунды"?
Смотри функцию localtime
>Есть ли какой-нибудь модуль, который переводит количество секунд в формат "месяцы/недели/часы/минуты/секунды"?Есть: Time::localtime;
Но это не единственный способ. Проще всего использовать стандартные функции localtime, gmtime или strftime:
( $seconds, $minutes, $hours, $day, $month, $year, $wday, $yday, $isdst) = localtime($time);
или
printf("Date: d-d-d\n",
sub {($_[5]+1900, $_[4]+1, $_[3])}->(localtime));можно использовать её в скалярном контексте:
$string = localtime($time), тогда в строке $string будет время в "человеческом формате", например:
print scalar localtime;
>Есть: Time::localtime;
>
>Но это не единственный способ. Проще всего использовать стандартные функции localtime, gmtime
>или strftime:
>
>( $seconds, $minutes, $hours, $day, $month, $year, $wday, $yday, $isdst) = localtime($time);
>
>
>или
>
>printf("Date: d-d-d\n",
> sub {($_[5]+1900, $_[4]+1, $_[3])}->(localtime));
>
>можно использовать её в скалярном контексте:
>$string = localtime($time), тогда в строке $string будет время в "человеческом формате",
>например:
>print scalar localtime;Опять не то. Я наверное не так объясьнил. Что такое localtime я знаю. Задача такая: дано количество секунд, скажем 3337s надо перевести это в формат 55m37s. А не считать это временем от epoch. Я могу это и скриптом считать, но не хотелось бы изобретать велосипед, если таковой модуль уже есть.
>если таковой модуль уже есть.Какой модуль!!!!????
просто PRINTF
$sec = $ARGV[0];
printf("%dm%ds",int ($sec/60),$sec`);
# - минуты и секунды
# ИЛИ
printf("%dh%dm%ds",int ($sec/3600),int ($sec/60),$sec`);
# - часы, минуты и секунды
>
>>если таковой модуль уже есть.
>
>Какой модуль!!!!????
>просто PRINTF
>$sec = $ARGV[0];
>printf("%dm%ds",int ($sec/60),$sec`);
># - минуты и секунды
># ИЛИ
>printf("%dh%dm%ds",int ($sec/3600),int ($sec/60),$sec`);
># - часы, минуты и секундыО! Это-то и интересовало. Спасибо.
>>
>>>если таковой модуль уже есть.
>>
>>Какой модуль!!!!????
>>просто PRINTF
>>$sec = $ARGV[0];
>>printf("%dm%ds",int ($sec/60),$sec`);
>># - минуты и секунды
>># ИЛИ
>>printf("%dh%dm%ds",int ($sec/3600),int ($sec/60),$sec`);
>># - часы, минуты и секунды
>
>О! Это-то и интересовало. Спасибо.
Какой-то глюк с отображением...
printf("%dh%dm%ds",int ($sec/3600),int ($sec/60),$sec % 60`);
^^^^^^^^^^^^
(для теста как отобразится: 4%5 = 4 % 5)
>>>
>>>>если таковой модуль уже есть.
>>>
>>>Какой модуль!!!!????
>>>просто PRINTF
>>>$sec = $ARGV[0];
>>>printf("%dm%ds",int ($sec/60),$sec`);
>>># - минуты и секунды
>>># ИЛИ
>>>printf("%dh%dm%ds",int ($sec/3600),int ($sec/60),$sec`);
>>># - часы, минуты и секунды
>>
>>О! Это-то и интересовало. Спасибо.
>Какой-то глюк с отображением...
>printf("%dh%dm%ds",int ($sec/3600),int ($sec/60),$sec % 60`);
>
>
>
>
>
>
>
> ^^^^^^^^^^^^
>(для теста как отобразится: 4%5 = 4 % 5)Когда-то давно я написал вот такую функцию:
sub print_sec {
my $num = shift;
return sprintf("=:d.d", int($num/3600),
int(($num - (int($num/3600)*3600))/60),
int($num - (int($num/60)*60)));
}Наверное это неэффективно, но работает и мне хватало...
>Когда-то давно я написал вот такую функцию:
>
>sub print_sec {
> my $num = shift;
>
> return sprintf("=:d.d", int($num/3600),
>
>
> int(($num -
>(int($num/3600)*3600))/60),
>
> int($num - (int($num/60)*60)));
>}
>
>Наверное это неэффективно, но работает и мне хватало...Я практически так же и сделал.
C часами, минутами и секундаии (и даже с неделями) - все прекрасно, но как быть с месяцАми?P.S. Опять же - високосные секунды не учитываются.
>C часами, минутами и секундаии (и даже с неделями) - все прекрасно,
>но как быть с месяцАми?Месяцев-то всего 12, можно и прописать.
>P.S. Опять же - високосные секунды не учитываются.
В моём случае это не принципиально.
>>C часами, минутами и секундаии (и даже с неделями) - все прекрасно,
>>но как быть с месяцАми?
>
>Месяцев-то всего 12, можно и прописатьПрописать что? Число дней для каждого месяца? А как определить в каком месяце начался отсчет?
>
>>P.S. Опять же - високосные секунды не учитываются.
>
>В моём случае это не принципиально.Ну хозяин - барин. (Хотя это была тык сыыть шутка).
>>>C часами, минутами и секундаии (и даже с неделями) - все прекрасно,
>>>но как быть с месяцАми?
>>
>>Месяцев-то всего 12, можно и прописать
>
>Прописать что? Число дней для каждого месяца? А как определить в каком
>месяце начался отсчет?А разве нельзя прописать (1..30), (1..31), (1..28)? Определить можно, дата начала отсчёта присутствует.
>А разве нельзя прописать (1..30), (1..31), (1..28)?Ну да я про это же. Число дней в каждом месяце можно прописать (если високосные годины не колышат).
> Определить можно, дата начала отсчёта присутствует.
Разве? Ты же говорил, что имееешь только число секунд и это число надо перевести в месяцы/недели/часы/минуты/секунды. Где в этом числе секунд начало отсчета?
>> Определить можно, дата начала отсчёта присутствует.
>
>Разве? Ты же говорил, что имееешь только число секунд и это число
>надо перевести в месяцы/недели/часы/минуты/секунды. Где в этом числе секунд начало отсчета?
>Ситуация такая: есть sql-база в которой, есть время подключения (естественно вплоть до секунды) и есть время в секундах, прошедших с времени подключения, т.е. время отключения отсутствует. Так вот надо показывать это время, записанное в секундах, в понимаемом обычным человеком формате.
Хотя мне уже сдаётся, что я это через одно место делаю. Слишком усложняю похоже.
>Ситуация такая: есть sql-база в которой, есть время подключения (естественно вплоть до
>секунды) и есть время в секундах, прошедших с времени подключения, т.е.
>время отключения отсутствует. Так вот надо показывать это время, записанное в
>секундах, в понимаемом обычным человеком формате.
>Хотя мне уже сдаётся, что я это через одно место делаю. Слишком
>усложняю похоже.
Если время подкл. есть в БД => пользуйся стандартными функциями SQL
типа select to_date("Format",Current time - tab.date_of_access) from tab;
Что-нибудь в этом духе. См. функции работы с датами
>Если время подкл. есть в БД => пользуйся стандартными функциями SQL
>типа select to_date("Format",Current time - tab.date_of_access) from tab;
>Что-нибудь в этом духе. См. функции работы с датамиПосмотрел. Действительно, похоже, так гораздо проще. Спасибо за совет.