Страница 1 из 1

[PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-07 22:10:31
Alex Keda
как сабж посчитать?

задача простая, мне надо на момент запуска скрипта знать сколько прошло секунд от начала суток, по времени сервера где этот скрипт и работает
===
с какого конца подступиться не знаю - лезут в голову извращённые методы с запросом в базу - на SQL такие задачки на раз решаются...
но не хочется. т.к. базы нет.

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-07 22:40:52
vadim64

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 0:14:10
ProFTP

Код: Выделить всё

# perl -MPOSIX -e 'print mktime((0)x3, sub { $_[3],$_[4]+1,$_[5] }->(localtime))'
1307484000
выведит время в unixtime за текущий день за 0-0-0 часов...
(может быть есть неточность, надо смотреть)

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 8:00:37
FiL
ProFTP писал(а):

Код: Выделить всё

# perl -MPOSIX -e 'print mktime((0)x3, sub { $_[3],$_[4]+1,$_[5] }->(localtime))'
1307484000
выведит время в unixtime за текущий день за 0-0-0 часов...
(может быть есть неточность, надо смотреть)
a зачем +1?
Как раз его не надо вроде.

Ну и полностью ответ на поставленную задачу тогда -

Код: Выделить всё

 perl -MPOSIX -e 'print time-mktime((0)x3, sub { $_[3],$_[4],$_[5] }->(localtime))'

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 13:52:06
Alex Keda
ненавижу этот язык...
а можно, для дебилов, однострочное представление разложить на десяток строк с использованием промежуточных переменных, чтобы понятно было что присходит?

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 14:00:24
Alex Keda

Код: Выделить всё

serv3# /root/scripts/stat/get.resource.usage.pl
Undefined subroutine &main::mktime called at /root/scripts/stat/get.resource.usage.pl line 25, <MYTMP> line 4276.
serv3# 

Код: Выделить всё

serv3# grep mktime /root/scripts/stat/get.resource.usage.pl
        $num_seconds = (time-mktime((0)x3, sub { $_[3],$_[4],$_[5] }->(localtime)));
serv3# 
не фурычит

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 14:07:49
Alex Keda

Код: Выделить всё

use POSIX;
помогло...

первый вопрос отсатёся открытым - я не понимаю как это работает =(

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 14:31:21
FreeBSP
как я понял, идея такая
1) получаем timestamp для 0:00:00 текущего дня
2) получаем текущий timestamp.
3) вычитанием первого из второго получаем искомое число секунд

Код: Выделить всё

$num_seconds = (
          time -                                              # из теккущего timestamp вычитаем 
          mktime(                                             # другой timestampб вероятно на начало текущих суток
                 (0)x3,                                       # особоая, чорная перловая магия
                 sub { $_[3], $_[4], $_[5] }->(localtime)     # тут вероятно идет извлечение из полученой даты вида Yr Mo Dy Hr Mn Sc последних трех составляющих - текуих часов, мин и секунд. скорее всего задается прям сразу процедура-обработчик для возвращаемого значения. возвращается массив, на обработчик он поступает как $_, и из него последние три элемента выкорчовываем
          ) # mktime
);
P.S.
Alex Keda писал(а):ненавижу этот язык...
+1 =)

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 15:28:03
Alex Keda
time - это что? если функция то почему не записана как time() ?

как можно вообще на таком языке писать. код должен сам себя документировать, а тут одна строка и надо поллитра, каждому, чтобы разобраться.
--
всё равно не понимаю.

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 15:35:44
ProFTP

Код: Выделить всё

sub { $_[3], $_[4], $_[5] }->(localtime)
это можно написать так:

Код: Выделить всё

use POSIX qw(strftime);
strftime("%Y-%m-%d", localtime)
только потом c текущего года надо было отнять 1900

ЗЫ: пишите так как вам удобно :)
FiL писал(а): a зачем +1?
Как раз его не надо вроде.
точно, не заметил

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 17:12:31
FreeBSP
Alex Keda писал(а):time - это что? если функция то почему не записана как time() ?
как можно вообще на таком языке писать. код должен сам себя документировать, а тут одна строка и надо поллитра, каждому, чтобы разобраться.
черная перловая магия =)
наверное "если перед именем нет явного обозначения, что это переменная, и нет такой константы, то это функция" или что то типа того
я сам тут больше на очучения ориентируюсь, а на не понимание =)

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 17:27:43
rmn
что-то вы тут лишнего понаписали. какие-то годы, таймстампы...
число секунд от начала суток равно:

Код: Выделить всё

h*3600 + m*60 + s
где:
h - текущий час
m - текущая минута
s - текущая секунда

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 17:38:32
FreeBSP
:good: :drinks:

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 18:12:09
Alex Keda
rmn писал(а):что-то вы тут лишнего понаписали. какие-то годы, таймстампы...
число секунд от начала суток равно:

Код: Выделить всё

h*3600 + m*60 + s
где:
h - текущий час
m - текущая минута
s - текущая секунда
это как, в коде?

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 18:28:07
rmn
Alex Keda писал(а): это как, в коде?
на php так:

Код: Выделить всё

$date = explode(":", date("h:i:s"));
$seconds = $date[0] * 3600 + $date[1] * 60 + $date[2];
perl не хочу знать :)

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 19:38:34
Alex Keda
с пыхом и сам разобрался бы =)
там всё прозрачней

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 19:56:37
FreeBSP
seconds.php

Код: Выделить всё

#! /usr/local/...../php-cgi
<?php
list($h, $i, $s) = explode(":", date("h:i:s"));
echo $h * 3600 + $i * 60 + $s
?>

Код: Выделить всё

#!/usr/bin/perl
...
$secs=`seconds.php`
...
ы?

или

Код: Выделить всё

#!/usr/bin/perl
...
$secs=`/bin/date ...`
...

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 20:37:16
rmn
FreeBSP писал(а): или

Код: Выделить всё

#!/usr/bin/perl
...
$secs=`/bin/date ...`
...
в перле нет встроенной функции, чтобы узнать текущее время?

---

как-то так:

Код: Выделить всё

my ($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst) = localtime time;
my $seconds = $hour*3600 + $min*60 + $sec;

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-08 22:07:25
thefree

Код: Выделить всё

perl -e 'print sub { $_[0]+$_[1]*60+$_[2]*3600 }->(localtime);'

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-09 0:21:22
ProFTP
FiL писал(а): Ну и полностью ответ на поставленную задачу тогда -
у тебя там там нету знакомых перл программистов?
ты там не знакомишься нигде в Маями? :)

давай сделаем компанию Filin America online corp Inc :-D

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-09 3:58:11
FiL
Перловые программисты знакомые есть. Не в Маями, правда.
Но я к ним не отношусь. Я перл также ненавижу, как и большинство в этом топике :)

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-09 4:00:27
FiL
rmn писал(а): как-то так:

Код: Выделить всё

my ($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst) = localtime time;
my $seconds = $hour*3600 + $min*60 + $sec;
Для нормальных людей лучше не "localtime time", а "localtime (time)" или просто "localtime()". Оно в таком виде понятнее :)

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-10 12:28:47
ProFTP
FiL писал(а):Перловые программисты знакомые есть. Не в Маями, правда.
Но я к ним не отношусь. Я перл также ненавижу, как и большинство в этом топике :)
но там же платят $900 в день!
Senior Perl Developer @ Global Investment Bank - Jersey City, NJ
для обычного программиста 600$ в день

ЗЫ: ваш проект гавно - но мы же вам платим © :-D

Re: [PERL] сколько прошло секунд от начала суток

Добавлено: 2011-05-10 22:07:18
FiL
ProFTP писал(а): но там же платят $900 в день!
Senior Perl Developer @ Global Investment Bank - Jersey City, NJ
для обычного программиста 600$ в день
900 - это corp-to-corp. Реально человеку дай Б-г половину получить в руки. Даже если 500 баксов в день, то это 60 баксов в час (причем плата "в день" меня несколько смущает. окажется, что надо работать по 12 часов в день без доплаты). 60 в час, минус все налоги, минус всякие там расходы на страховку и прочие радости, которые положены белым людям на постоянной работе (в отличии от контракта) и получается, что весьма так себе зарплатка. Побольше моей процентов на 30-40, но и гемора побольше на порядок.

P.S. И все равно я не перл-программист. :)