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

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

  • Как получить приемлемую последнюю измененную временную метку для моего сайта Jekyll с помощью сценария оболочки?
  • Разница между `ls -c` и` ls -t`
  • Calc добавляет '(апостроф) при импорте времени из CSV
  • Полная дата файла (без утилит GNU)
  • В org-mode Emacs любой способ скрыть поддерево с отметкой времени, не установленной на сегодняшний день?
  • Возможно ли обновлять измененные времена только без копирования файлов при использовании rsync?
  • Почему у моего файла есть несколько записей crtime?
  • Загрузите только недавно измененные файлы с помощью wget over FTP
  • 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 - лучшая ОС в мире.