Каков наиболее эффективный способ добавления миллисекунд к этому коду?

#----------------------------------------------------------------------------- # # Get time string # #----------------------------------------------------------------------------- # sub formatTime { my ( $seconds ) = @_; my( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime( $seconds ); $year += 1900; $mon += 1; return ( sprintf "%02d/%02d/%04d %02d:%02d:%02d", $mday,$mon,$year,$hour,$min,$sec ); } #----------------------------------------------------------------------------- # # Extract time from the string # #----------------------------------------------------------------------------- # sub extractTime { my ( $edate, $time ) = @_; my $date = $1 if ($edate =~ /(\d+\/\d+\/\d+)/); # remove leading '[' etc. my ( $mday, $mon, $year ) = split( /\//, $date ); my ( $hour,$min, $sec ) = split( /:/, $time ); return (timelocal( $sec, $min, $hour, $mday, ($mon - 1), ($year - 1900 ))); } 

One Solution collect form web for “Каков наиболее эффективный способ добавления миллисекунд к этому коду?”

Чтобы получить более высокую точность для функции formatTime , вам нужно взять миллисекунды, а не секунды. Вы не можете делать округленные секунды и уточнять.

Поскольку localtime () принимает только секунды с эпохи, вам нужно будет преобразовать пройденные милисекунды и преобразовать их в секунды. Вот пример:

 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 ); } 

Другой вариант – использовать DateTime . Если вы за считанные секунды считаете десятичным, он может создать объект DateTime с большей точностью:

 use DateTime; sub formatTime { my ( $seconds ) = @_; my $dt = DateTime->from_epoch( epoch => $seconds ); # .... } 
  • Использовать только mtime-сравнение с rsync?
  • Подробная информация о команде Stat
  • Как найти последние n новых файлов для каждой из нескольких каталогов
  • touch и tar из текстового файла
  • Изменение измененной даты файла в зависимости от даты в имени файла
  • Извлечь временную метку из файла gzip
  • Заменить символ алфавитом в зависимости от позиции в строке
  • Каково законное использование команды `touch`?
  • Корреляция / var / log / * timestamps
  • Нужно преобразовать столбец timestamp unix epoch в каждую строку с помощью sed или awk
  • Время изменения Solaris 10
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.