【问题标题】:How to convert any date time to microseconds in perl如何在perl中将任何日期时间转换为微秒
【发布时间】:2015-04-15 06:03:16
【问题描述】:

我需要使用 perl 将任何给定的日期或日期时间转换为微秒。我尝试了以下代码,它仅适用于您当前运行它的时间。

use Time::HiRes qw(gettimeofday);

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

我想知道是否有办法在 perl 中将任何给定的日期或日期时间转换为微秒,如何? 顺便说一句,我没有安装 Parse 模块。我的 perl 版本是为 i386-linux-thread-multi 构建的 v5.8.8。

【问题讨论】:

  • 我只是评论,因为我没有代码给你。 Time::Piece 是一个核心模块,您可以在将日期(可能使用 strptime)转换为 ->epoch 后执行 1000 * 操作。
  • @Ashley Time::Piece 在 perl 5.9.5 的模块核心中;

标签: perl


【解决方案1】:

DateTime 可以轻松做到这一点:

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

更多示例见the docs on cpan

【讨论】:

  • 谢谢汤姆。但是,不幸的是,当我运行您的代码时,我得到“无法在 @INC 中找到 DateTime.pm”。我的服务器是 prod 服务器,我无法在其上安装任何东西。
  • 考虑安装(在您的 HOME 目录中)prelbrew。它提供了一个与系统安装的 Perl 隔离的环境,您可以在其中安全地添加自己的模块。
  • @Gary 如果您的服务器没有 DateTime 等基本库,请考虑切换到其他提供程序...使用该文件夹中的库。
【解决方案2】:

我终于找到了将任何给定日期转换为微秒的方法。也就是说,使用如下代码 sn-p 的系统日期函数。 假设我想将 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 版本,无需安装任何模块。

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2012-12-02
    • 2012-09-17
    • 2020-10-20
    • 2021-03-31
    • 2011-04-14
    • 2017-01-29
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多