Para obter uma precisão maior para sua função formatTime
, é necessário executar milissegundos, em vez de segundos. Você não pode levar segundos arredondados e torná-lo mais preciso.
Como o localtime () só aceita segundos desde a época, você precisará converter os milésimos de segundo passados e convertê-los em segundos. Aqui está um exemplo:
use POSIX qw(floor);
sub formatTime {
my ( $milliseconds ) = @_;
my $seconds = floor($milliseconds / 1000);
my $msec = $milliseconds % 1000;
my( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
localtime( $seconds );
$year += 1900;
$mon += 1;
return ( sprintf "%02d/%02d/%04d %02d:%02d:%02d:%04d",
$mday,$mon,$year,$hour,$min,$sec,$msec );
}
A outra opção seria usar o DateTime . Se você passar em segundos como um decimal, ele poderá criar um objeto DateTime com maior precisão:
use DateTime;
sub formatTime {
my ( $seconds ) = @_;
my $dt = DateTime->from_epoch( epoch => $seconds );
# ....
}