如何在perl中将任何日期时间转换为微秒

3
我需要使用Perl将任何给定的日期或日期时间转换为微秒。我尝试了以下代码,它只适用于您运行它的当前时间。
use Time::HiRes qw(gettimeofday);

my $timestamp = int (gettimeofday * 1000);
print STDOUT "timestamp = $timestamp\n";

我想知道如何在Perl中将任何给定的日期或日期时间转换为微秒。我的Perl版本是v5.8.8,构建于i386-linux-thread-multi平台。另外,我没有安装Parse模块。

http://weblog.bulknews.net/post/58079418600/plenv-alternative-for-perlbrew - mpapec
1
我只是留言,因为我没有代码给你。Time::Piece 是一个核心模块,你可以在将日期(可能使用 strptime)转换为 ->epoch 后执行你的 1000 * 操作。 - Ashley
1
@Ashley,Time::Piece模块自perl 5.9.5起已经包含在核心代码中。 - collapsar
2个回答

3

DateTime 轻松实现此功能:

my $dt = DateTime->new( year => 2012, nanosecond => 4 );
print $dt->hires_epoch();

更多示例请参见cpan文档


谢谢 Tom。但是很不幸,当我运行你的代码时,出现了“在 @INC 中找不到 DateTime.pm”的错误。我的服务器是生产服务器,我不能在其上安装任何东西。 - Gary
考虑在您的HOME目录中安装prelbrew。它提供了一个与系统安装的Perl隔离的环境,您可以在其中安全地添加自己的模块。 - JRFerguson
2
如果你的服务器没有基本库(例如DateTime),那么考虑切换到其他提供者... 或者,只需将模块解压缩到某个文件夹中,然后使用use lib "/path/to/folder";即可在该文件夹中使用库。 - Tom van der Woerdt

0

我终于找到了一种将任何给定日期转换为微秒的方法。也就是说,使用系统日期函数,如下面的代码片段。 假设我想将100天前的日期转换为微秒。

my $anydate = strftime "%Y%m%d", localtime( time -  100 * 24 * 60 * 60 ); # a date of 100 days ago;
my $microsecs = `date -d "$anydate"  +%s%N | cut -b1-13`;
print "$microsecs\n";

这在任何Perl版本中都可以工作,而不需要安装任何模块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接