5.005中是否存在将epoch秒转换为可打印日期时间的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模块集中)
答案 0 :(得分:11)
根据CPAN,POSIX模块可用。所以你可以使用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
答案 1 :(得分:5)
查看核心例程localtime
和gmtime
(还有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
答案 2 :(得分:0)
POSIX :: strftime解决方案是最灵活的解决方案。但是,如果您对确切的格式不是很挑剔,那么您可以在标量上下文中使用localtime
(或gmtime
)从epoch秒获取人类可读的日期时间字符串。
$ perl -le'print scalar localtime 1000000000'
Sun Sep 9 02:46:40 2001