是否有 perl 5.005 核心模块可以将纪元秒数转换为日期时间字符串?
Posted
技术标签:
【中文标题】是否有 perl 5.005 核心模块可以将纪元秒数转换为日期时间字符串?【英文标题】:Is there a perl 5.005 core module that would convert epoch seconds to a datetime string? 【发布时间】:2011-12-25 09:13:30 【问题描述】: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 模块中)
【问题讨论】:
“不要问。只是因为非技术原因无法完成”废话! search.cpan.org/~gugod/App-perlbrew-0.33/lib/App/perlbrew.pm @Jack - “非技术”的哪一部分适用于您提出的技术解决方案?一些开发人员存在于大型企业环境中,这些东西称为“策略”。 【参考方案1】:根据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
【讨论】:
【参考方案2】:请参阅核心例程 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
【讨论】:
【参考方案3】:POSIX::strftime 解决方案是最灵活的解决方案。但是,如果您对确切的格式不是很挑剔,那么您可以在标量上下文中使用localtime
(或gmtime
)从纪元秒中获取人类可读的日期时间字符串。
$ perl -le'print scalar localtime 1000000000'
Sun Sep 9 02:46:40 2001
【讨论】:
以上是关于是否有 perl 5.005 核心模块可以将纪元秒数转换为日期时间字符串?的主要内容,如果未能解决你的问题,请参考以下文章
将记录的日期时间转换为 UNIX 纪元时间戳的 Perl 脚本
如何在 Perl 中将 dd/mm/yyyy 转换为纪元时间?