如何在perl中获得'毫秒'作为时间的一部分?

时间:2013-08-07 09:52:00

标签: perl

我需要以"20130808 12:12:12.123"格式获取时间,即"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.

我该怎么做?

2 个答案:

答案 0 :(得分:23)

这是一个完整的脚本。如前所述,它使用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";

答案 1 :(得分:10)

使用Time::HiRes

简要地看一下,它可以提供自epoch公平的毫秒 很容易,但似乎没有扩展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|;