仅使用Perl中的核心模块获取ISO DateTime?

时间:2015-06-17 08:35:18

标签: perl

我想获得一个日期时间字符串,例如只有核心模块的2015-06-17 10:20:34。这是因为测试和所有依赖项的获取,cpan install DateTime在我的机器上需要很长时间。

如果我将我的计划交给我的同事。他们还需要安装缺少的模块。但是,如果我只是这样做:

 my $date = `date "+%Y-%m-%d %H:%M:%S"`; chomp $date;

它只需要一行,它不需要额外的模块,适用于所有 POSIX 机器。

  

为什么我需要在这种情况下安装DateTime

然而,DateTime->now是谷歌推荐的解决方案。我认为不应该,我认为我错了,我无法弄清楚原因。

4 个答案:

答案 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');

其他几点:

  • 如果您使用预构建的软件包(例如,在RedHat派生系统上使用yum install perl-DateTime),您的DateTime安装可能会更快。
  • 避免shell运行系统命令有两个原因 - 首先你失去了跨平台的兼容性,其次创建一个新的shell是一个相对缓慢和昂贵的操作。