Как получить миллисекунды как часть времени в 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|;