Intereting Posts
Что такое сокет? Как оставить только заданные символы в файле? Команда ls в ftp> не работает! Ограничение для каждого процесса грязных байтов без замедления всей системы Как создать цикл for с переменным числом итераций? DD-WRT и команда монтирования Перемещение / var, / home для отдельного раздела Что произойдет, если количество свободной памяти (vm.min_free_kbytes) будет слишком низким? Какие коды клавиш соответствуют запросам на включение сенсорной панели и сенсорной панели? Запуск приложения, составленного на другом дистрибутиве На заблокированном экране, как я могу автоматически отключить мониторы, если они проснутся? Убитые `rm` и` cp` на долю nfs Заменить «o» на «0» в большом списке слов и сохранить исходное слово? Добавление файлов в ISO-образ и автоматическое выполнение установки пост-сценария Определить смещение символа ядра из файла elf

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

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

Чтобы получить более высокую точность для функции 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 ); # .... }