Сравнение времени в Perl без использования модулей - PullRequest
0 голосов
/ 20 апреля 2011

Я пытаюсь сравнить две метки времени, чтобы увидеть, какая из них самая последняя, ​​это было бы легко, если бы я мог использовать модуль DateTime, но, к сожалению, у меня нет прав для установки каких-либо модулей на серверах, и поэтому я ограничен только для собственных команд Perl.

Время указывается в форме «ММ / ДД / ГГГГ чч: мм: сс».

Ответы [ 4 ]

5 голосов
/ 20 апреля 2011

Если вы сначала конвертируете время в формат YYYY/MM/dd hh:mm:ss, используя код ниже:

my ($date, $time) = split(/\s+/, $val);
my ($m, $d, $y) = split(/\//, $date);
$val = sprintf("%04d/%02d/%02d %s", $y, $m, $d, $time);

Затем вы можете просто использовать стандартное лексическое сравнение по датам.

0 голосов
/ 21 апреля 2011

Perl включает в себя модули Time :: Piece и Time :: Local.Или вы можете создать исполняемый файл с PAR :: Packer, который будет включать DateTime, и скопировать его на сервер.

Конечно, преобразование в формат «ГГГГ-ММ-ДД чч: мм: сс» проще всего, если есть какие-либо другие функции.не нужны.

0 голосов
/ 20 апреля 2011

Единственная часть строки, которая не соответствует порядку лексической сортировки, это часть YYYY, так что вы можете сравнить эту часть отдельно.

# MM/DD/YYYY hh:mm:ss
# 0123456789T12345678
@sorted_dates = sort { substr($a,6,4) cmp substr($b,6,4) || $a cmp $b } @dates;
0 голосов
/ 20 апреля 2011

Вы можете использовать регулярное выражение для переформатирования даты в формат «ГГГГ / ММ / ДД чч: мм: сс», чтобы можно было напрямую сравнивать две даты.

$date =~ s|^(\d{2})/(\d{2})/(\d{4})|$3/$1/$2|;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...