3

5.005 中是否有一个 perl 核心模块可以将纪元秒转换为可打印的日期时间?

我们的系统有 DateTime.pm,但需要该功能的脚本仍在 Perl 5.005 上,无法将其升级到 5.6+(不要问。只是由于非技术原因无法完成)。DateTime.pm - 至少我们拥有的版本 - 需要 5.6。

因此我需要以下之一:

  • 理想情况下,Perl 5.005 核心中的模块可以将纪元秒数转换为日期/时间字符串。最好是 YY/MM/DD hh:mm:ss 格式,但不是必需的。

  • 如果做不到这一点,一个 5.005 兼容的非 XS 模块会将纪元秒转换为日期/时间字符串。最好是 YY/MM/DD hh:mm:ss 格式,但不是必需的。

    强烈偏好在 Perl 5.005 发布时在 CPAN 上具有此功能的模块(这样看来,它可能会出现在公司现有的 CPAN 模块集中)

4

3 回答 3

11

根据CPANPOSIX模块是可用的。所以你可以使用该strftime功能。这是我在 5.8.8 中一直使用的

use POSIX();
my $time_t = 1234567890;
my $txt = POSIX::strftime( "%Y-%m-%d %T", localtime($time_t) );
print "$txt\n";

2009-02-14 10:31:30
于 2011-11-09T15:04:16.007 回答
5

请参阅核心例程localtimegmtime(也time)。

恕我直言,编写一个小子程序来进行这种格式化通常比引入新的依赖项更容易。例如:

sub epoch_to_datetime {
  my $time = shift(@_) || time();
  my ($s, $m, $h, $md, $mo, $yr) = localtime($time);
  my $date = join("/",
      sprintf("%02d", $yr % 100),
      sprintf("%02d", $mo + 1),
      sprintf("%02d", $md));
  my $time = join(":",
      sprintf("%02d", $h),
      sprintf("%02d", $m),
      sprintf("%02d", $s));
  return "$date $time";
}

print epoch_to_datetime(time()) . "\n";
# 11/11/09 08:06:10
于 2011-11-09T14:50:57.753 回答
0

POSIX::strftime 解决方案是最灵活的解决方案。但是,如果您对确切的格式不是很挑剔,那么您可以在标量上下文中使用localtime(或gmtime) 从纪元秒中获取人类可读的日期时间字符串。

$ perl -le'print scalar localtime 1000000000'
Sun Sep  9 02:46:40 2001
于 2011-11-10T15:43:05.797 回答