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

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

  • что такое разрешение jiffie в ядре Linux
  • Изменить временную метку файла и время показа вместо года с помощью ls
  • Как я могу хранить mtime файлов и каталогов, когда я использую rsync или cp? Для использования в резервном / инкрементальном резервном копировании
  • Удалить подкаталоги с YYYYMMDD с именем старше N дней
  • Solaris + отметка времени файла отображения
  • вычислять время отклика из записей журнала времени
  • Задача Cron для удаления файлов старше 3 дней
  • Tweak perl скрипт для чтения человеком dmesg
  • 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 ); # .... } 
    Linux и Unix - лучшая ОС в мире.