При анализе логов возникает необходимость вычислить разность времени между двумя событиями. Данная функция существенно сокращает получение требуемого результата. Функция реализована на Perl (однако весьма просто расширить ее функциональность и портировать на другие языки программирования) и имеет следующие возможности:
- 2 параметра timestamp или один параметр - их разница;
- разумное вычисление больших промежутков (при разнице более недели нет необходимости вычислять точнее чем количество дней);
- разумное вычисление больших промежутков (при разнице более года - вычисляется разница в годах, без дальнейшей детализации);
- разумное форматирование малых промежутков (ноль дней и ноль часов по умолчанию удаляются);
- вычисляется абсолютная величина;
sub timediff { my $x = shift; $x -= shift if defined @_; $x = abs($x); # the more than one year return ">" . int($x / 31536000) if $x >= 31536000; # the more than one week return "~" . int($x / 86400) if $x >= 604800; my $d = sprintf "%d %02d:%02d:%02d", int($x / 86400), int($x / 3600) % 24, int($x / 60) % 60, $x % 60; $d =~ s/^0+ (00:)?// unless shift; return $d; }Далее - примеры использования:
print timediff(time); # ">38" means "the more than 38 years" print timediff(10000); # "02:46:40" print timediff(1000000); # "~11" means "about 11 days"Ссылка на debugger.ru
No comments:
Post a Comment