При анализе логов возникает необходимость вычислить разность времени между двумя событиями. Данная функция существенно сокращает получение требуемого результата. Функция реализована на 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