Как получить миллисекунды как часть времени в perl?

Мне нужно получить время в формате "20130808 12:12:12.123" i.e., "yyyymmdd hour:min:sec.msec".

Я пробовал

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); 
$year += 1900;
$mon++;
if ($mon<10){$mon="0$mon"} 
if ($mday<10){$mday="0$mday"} 
if ($hour<10){$hour="0$hour"} 
if ($min<10){$min="0$min"} 
if ($sec<10){$sec="0$sec"}  but this doesn't provide the `msec` as a part of time.

Как я могу это сделать?

Ответ 1

Здесь полный script. Как было предложено ранее, для поддержки микросекунды используется Time::HiRes::time, а также используется POSIX::strftime для упрощения форматирования. К сожалению, strftime не может работать с микросекундами, поэтому это нужно добавить вручную.

use Time::HiRes qw(time);
use POSIX qw(strftime);

my $t = time;
my $date = strftime "%Y%m%d %H:%M:%S", localtime $t;
$date .= sprintf ".%03d", ($t-int($t))*1000; # without rounding

print $date, "\n";

Ответ 2

использовать Время:: HiRes

Глядя на это кратко, он может обеспечить миллисекунды с эпохи справедливости легко, но, похоже, не увеличивало localtime(), поэтому, вероятно, немного работы участвуя в его использовании в полном контексте календаря.

Вот рабочий пример:

use strict;
use warnings;

use Time::Format qw/%time/;
use Time::HiRes qw/gettimeofday/;

my $time = gettimeofday; # Returns ssssssssss.uuuuuu in scalar context

print qq|$time{'yyyymmdd hh:mm:ss.mmm', $time}\n|;