我想获得一个日期时间字符串,例如只有核心模块的2015-06-17 10:20:34
。这是因为测试和所有依赖项的获取,cpan install DateTime
在我的机器上需要很长时间。
如果我将我的计划交给我的同事。他们还需要安装缺少的模块。但是,如果我只是这样做:
my $date = `date "+%Y-%m-%d %H:%M:%S"`; chomp $date;
它只需要一行,它不需要额外的模块,适用于所有 POSIX 机器。
为什么我需要在这种情况下安装
DateTime
?
然而,DateTime->now
是谷歌推荐的解决方案。我认为不应该,我认为我错了,我无法弄清楚原因。
答案 0 :(得分:6)
Perl 5.14包含core module Time::Piece,其datetime
方法在ISO 8601中返回日期和时间。
use Time::Piece;
my $t = localtime;
say $t->datetime;
这将返回2015-06-17T10:59:15
。如果您不想要T
,请将其删除。
say localtime->datetime =~ y/T/ /r;
答案 1 :(得分:3)
使用POSIX
函数strftime
:
use POSIX qw( strftime );
print strftime "%Y-%m-%d %H:%M:%S", localtime;
自5.0以来, POSIX
一直是核心。
答案 2 :(得分:2)
自大约八年前的版本5.10以来,Time::Piece
模块一直处于核心Perl中
它会覆盖localtime
核心功能,看起来像这样
use Time::Piece;
print localtime->datetime;
<强>输出强>
2015-06-17T12:55:36
如果确实想要一个空格而不是标准T
那么,在Perl v5.14或更高版本上你可以写
print localtime->datetime =~ tr/T/ /r;
在没有/r
“非破坏性”选项的earler版本中,您必须将字符串放入变量并使用tr/T/ /
修改它
答案 3 :(得分:1)
Time :: Piece为您提供了一个包含许多有用方法的对象。正如其他人所指出的那样,datetime()
以ISO格式为您提供日期和时间。
use Time::Piece;
print localtime->datetime;
但是如果你想要一种不同的格式(比如问题中的&#34;不完全ISO&#34;格式),你可以使用strftime()
方法。
use Time::Piece;
print localtime->strftime('%Y-%m-%d %H:%M:%S');
其他几点:
yum install perl-DateTime
),您的DateTime安装可能会更快。